Почему Kernel# требует 45% моего времени на получение?
Чтобы ускорить мой набор тестов, я профилировал его и получил следующее
Total: 1445 samples
650 45.0% 45.0% 1171 81.0% Kernel#require
261 18.1% 63.0% 261 18.1% garbage_collector
47 3.3% 66.3% 168 11.6% Kernel.load
39 2.7% 69.0% 82 5.7% Module#class_eval
27 1.9% 70.9% 817 56.5% ActiveSupport::Dependencies::Loadable#load_dependency
25 1.7% 72.6% 58 4.0% Enumerable#find
25 1.7% 74.3% 25 1.7% Module#constants
20 1.4% 75.7% 1171 81.0% Kernel#gem_original_require
19 1.3% 77.0% 19 1.3% File.file?
18 1.2% 78.3% 415 28.7% Kernel.require
.
.
.
Из этого ответа Почему Kernel # требует такой большой кусок ресурсов моего приложения? Я думаю, что это ожидается, но я действительно удивлен огромным количеством здесь. Это правда? Можем ли мы что-нибудь сделать с этим?
1 ответ
Вы ничего не можете с этим поделать, потому что этап require фактически строит AST для вашего приложения Ruby - он "создается" во время выполнения как бы. Тем не менее, вам нужно изолировать свое профилирование от тех мест, где уже была выполнена вся загрузка приложения (например, выполнить несколько пробных прогонов для действия и только затем выполнить профилирование). Таким образом, вы исключите шаг компиляции из своего теста.
Также убедитесь, что вы используете 1.9.3, а не 1.9.2, так как было исправлено, чтобы ускорить требование.