Я разрабатываю свой первый драгоценный камень под названием t_time_tracker (woohoo!). Все развивалось хорошо; Я optomized его так же, как я, возможно, мог бы сократить время выполнения до как можно меньше:Почему мой драгоценный камень так долго загружается?
t_time_tracker[master*]% time ruby -Ilib ./bin/t_time_tracker
You're not working on anything
0.07s user 0.03s system 67% cpu 0.141 total
(это «привет мир» из моего приложения - назвав его без параметров просто выводит «Вы» не работаю ни на что »)
Около десятой части секунды и использует 67% моего процессора - здорово, я могу жить с этим. Он чувствует себя довольно мгновенно. Давайте строить:
$ gem build t_time_tracker.gemspec
$ gem install ./t_time_tracker-0.0.0.gem
И сделать то же самое с установленным двоичном:
$ time t_time_tracker
You're not working on anything
t_time_tracker 0.42s user 0.06s system 93% cpu 0.513 total
полсекунды ?! Откуда это пришло?! Давайте добавим отладочную и включают в себя систему драгоценный камень из бинарного развития, чтобы увидеть, где узкое место:
t_time_tracker[master*]% time ruby ./bin/t_time_tracker
(starting binary)
(require 'time' and 'optparse')
0.041432
(before `require 't_time_tracker')
0.497135
(after `require 't_time_tracker')
(Gem.loaded_specs.keys = t_time_tracker)
(initializing TTimeTracker class)
You're not working on anything
ruby ./bin/t_time_tracker 0.44s user 0.07s system 91% cpu 0.551 total
Хорошо, так что требуется строка «t_time_tracker» ', кажется, виновником. Давайте попробуем еще раз в irb, чтобы сузить его далее:
$ irb
>> t=Time.now; require 't_time_tracker'; puts Time.now-t
0.046792
=> nil
... что? Но это заняло полсекунды! Давайте попробуем строить драгоценный камень с нашей отладочный вывод:
$ gem build t_time_tracker.gemspec
$ gem install ./t_time_tracker-0.0.0.gem
$ time t_time_tracker
(starting binary) <---noticeable half second delay before this line shows up
(require 'time' and 'optparse')
0.050458
(before `require 't_time_tracker')
0.073789
(after `require 't_time_tracker')
(Gem.loaded_specs.keys = t_time_tracker)
(initializing TTimeTracker class)
You're not working on anything
t_time_tracker 0.42s user 0.06s system 88% cpu 0.546 total
Так что да, где это 0,5 вторая задержка приходит? Мне обычно было все равно, но это то, о чем я звоню пятьдесят раз в день, чтобы обновить то, что я делаю. 50 * 0,5 секунды * 365 дней * 70 лет = 15 дней утраченной жизни.
Информация о системе:
Mac OS X 10.7.3. 2 ГГц Intel Core 2 Duo. 4 ГБ оперативной памяти. ruby 1.9.2p290.
% gem -v
1.8.10<---noticeable half second delay before this line shows up
% gem list | wc -l
209
Какова производительность на 1.9.3? –
Интересный ... 'rvm 1.9.3 && gem install t_time_tracker' снова дает мне супер быстрое время выполнения (всего 0.100 секунд), но я подозрюю, что это только потому, что' gem list | wc -l' = 7. Hmmm ... – cgenco
После 'gem install rails',' gem list | wc -l' = 33, а время t составляет в среднем около 0,21. Является ли решение просто «не устанавливать много драгоценных камней»? – cgenco