Делает ли запрос из стандартной библиотеки программу медленнее?

#ruby #import #require #standard-library

#рубин #импорт #требовать #стандартная библиотека #ruby #требует #standard-library

Вопрос:

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

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

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

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

  1. Делает ли импорт из стандартной библиотеки скрипты медленнее?
  2. Если да, то всегда ли это незначительно, или это зависит от упаковки?
  3. Как насчет пакетов сторонних производителей? Импортируются ли они медленнее, чем те, что есть в стандартной библиотеке?

Комментарии:

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

Ответ №1:

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

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

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

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

Ответ №2:

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

Так что да, требуется время, чтобы найти и загрузить его.

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

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

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

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