我正在开发我的第一个叫做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
(这是“世界你好”我的应用程序 - 不带参数调用它只是打印出“你”没有任何工作“)
大约十分之一秒,并使用我的CPU的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 GHz Intel Core 2 Duo。 4 GB RAM。红宝石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.嗯...... – cgenco
'gem install rails','gem list | wc -l'= 33,'时间t'约为0.21的平均值。解决方案只是“不要安装大量的宝石”? – cgenco