Требует ли от стандартной библиотеки замедлить работу программы? - PullRequest
1 голос
/ 27 марта 2019

Я имею в виду именно ruby, когда задаю этот вопрос, но если ответ не зависит от языка, я бы тоже хотел знать.

Я часто require из стандартной библиотеки rubyа именно fileutils, open3 и pathname.

Но если мне нужно использовать их возможности только в одну или две строки, я избегаю их и использую (иногда менее читаемые) альтернативы, которые неrequire.

Однако их использование не влияет на производительность моих сценариев, и даже при использовании быстрых тестов (при использовании time) все работает с той же скоростью, с какой ониесли бы я использовал разные методы.Но мне кажется странным, что это не имеет никакого значения, потому что тогда почему они должны быть require d для использования (а не просто включены напрямую)?Итак, конкретные вопросы:

  1. Замедляет ли импорт из стандартной библиотеки сценарии?
  2. Если да, всегда ли это незначительно или зависит от пакета?
  3. А как насчет сторонних пакетов?Импортировать их медленнее, чем в стандартной библиотеке?

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Импорт библиотеки займет ненулевое количество времени, но количество времени прямо пропорционально тому, какая библиотека.Некоторые из них очень маленькие, некоторые гораздо больше, но все те, которые поставляются с Ruby, обычно быстро загружаются.

Если вы не запускаете свой скрипт тысячу раз в секунду, влияние require будетбудет минимальным.

Обычно лучше убрать все операции require как можно раньше, чтобы избавиться от любых проблем с зависимостями, особенно с гемами.Нет ничего хуже, чем код, который аварийно завершает работу из-за нарушенной зависимости, но только в том случае, если вы выполняете определенное действие, которое происходит не часто.

Если вы запускаете этот процесс тысячи раз, рассмотрите такой инструмент, как Spring или ваша собственная модель разветвления, чтобы избежать штрафа при запуске.Вы можете fork предварительно сконфигурировать процесс любое количество раз, каждый из которых будет готов почти мгновенно.

0 голосов
/ 27 марта 2019

При использовании require вы говорите Ruby о загрузке некоторого файла (вашего собственного файла, стандартной библиотеки или внешней библиотеки).

Так что да, для его поиска и загрузки требуется время.

Но требуемый файл загружается только один раз (обычно при запуске, потому что обычно require вверху файла).

Загружает данный name, возвращая true в случае успеха и false, если функция уже загружена.

Абсолютный путь к загруженному файлу добавляется к $LOADED_FEATURES ($").Файл не будет загружен снова, если его путь уже указан в $"

И время, потраченное на него, зависит от размера файла и размера связанных файлов.

...