Я разрабатываю свой первый драгоценный камень под названием t_time_tracker (woohoo!). Все развивалось хорошо; Я оплотировал его настолько, насколько мог, чтобы сократить время выполнения до минимально возможного:
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
Хорошо, поэтому строка `require '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