Почему Kernel# требует такой большой части ресурсов моего приложения?
Я пробую ruby-prof и запускаю его против какого-то автономного модуля. Ядром модуля являются 3 класса, возможно, используются еще 3 вспомогательных класса. Так что не должно быть огромных накладных расходов с тоннами потребностей и включений. Это нормально в большом (gish) приложении с установленным большим количеством драгоценных камней?
18.06 7.67 1.99 0.00 7.66 1366 Kernel#require
5.80 1.21 0.64 0.00 0.83 18704 Array#map
5.73 10.21 0.63 0.00 10.09 38133 Array#each
5.17 1.13 0.57 0.00 0.56 21796 Array#include?
4.40 0.49 0.49 0.00 0.00 345434 Symbol#to_s
3.78 0.42 0.42 0.00 0.00 446478 String#==
2 ответа
От ruby-prof
Документация:
Для профилирования приложения Rails крайне важно запустить его, используя такие производственные настройки, как классы кэша, поиск в представлении кэша и т. Д. В противном случае код загрузки зависимостей Rail будет перегружен в любое время, потраченное на само приложение (наши тесты показывают, что загрузка зависимостей Rails вызывает примерно 6-кратное замедление).
Вы используете это с настройками производства? Если вы не используете кэшированные данные и вместо этого должны каждый раз читать файлы / классы с диска, я могу понять, почему вы видите, что ваша система проводит так много времени в Kernel#require
,
Согласно вашему описанию, я запустил ruby-prof в аналогичном случае, за исключением того, что для моего рудника требуется всего два камня, которые я бы не назвал "честным числом". При этом я все еще потратил 10% своего 7-секундного времени выполнения с классом Kernel#gem_original_require.
Я полагаю, что то, что вы видите, довольно типично, так как похоже на мой случай.