Почему Kernel # требует 45% моего времени на получение? - PullRequest
3 голосов
/ 13 декабря 2011

Чтобы ускорить мой набор тестов, я профилировал его и получил следующее

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 Ответ

0 голосов
/ 13 декабря 2011

Вы ничего не можете с этим поделать, потому что этап require на самом деле создает AST для вашего приложения Ruby - он "создается" во время выполнения, как это было раньше.Тем не менее, вам нужно изолировать свое профилирование от тех мест, где уже была выполнена вся загрузка приложения (например, выполнить несколько пробных запусков для действия и только затем выполнить профилирование).Таким образом, вы исключите шаг компиляции из своего теста.

Также убедитесь, что вы используете 1.9.3, а не 1.9.2, так как было исправлено, чтобы ускорить требование.

...