Почему 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.

Я полагаю, что то, что вы видите, довольно типично, так как похоже на мой случай.

Другие вопросы по тегам