更新2:这是Ruby1.9.2加载文件的已知错误/特性。http://twitter.com/#!/rails/status/72801149769621504
更新:一开始我认为这是一个问题,但在对此进行了一些研究后,我认为这可能无法解决。我想发布这篇文章,以防其他人也遇到相同的情况,并想知道在Rails和Bundler内部发生了什么。
有别的开发者在他们的Rails 3应用中看到长时间的加载时间吗?我在environment.rb、application.rb、boot.rb和railties/lib/rails/initializable.rb中放置了计时器。时间以秒为单位计算,经过的时间是自上次记录时间以来的时间。生产加载时间需要更长的时间。部分原因是硬件较少,另一部分原因是由于eager_load!(也许是Thin vs Mongrel的缘故) 。看起来Bundler占据了大量的加载时间,我想这是可以预料的。我测试了一个应用程序在dev和prod中,还有一个空白的应用程序在dev中。我测试了2个应用服务器,只是想看看是Thin导致的。在prod中,我也看到类似的情况(由于2.2.15中的生成行为,使其无法使用)。我针对边缘Rails进行了测试,dev中的性能略差14.5秒比14.2秒。如果我删除我的测试依赖项,则可以节省2-3秒,但运行测试时无济于事。我想只是稍微有点恼人,等待所有我的Thin实例重新启动需要5分钟,并且在我的测试运行之前要等待15秒,但从生产率方面来看,这是可以接受的折衷方案,因为我使用Rails 3获得了更高的生产率。如果有人有任何想法来帮助加快速度,我会倾听的。以下是测试结果:
注意:我的Rails 2.3应用程序在dev中加载时间不到3秒(尽管自从转移到rails3以来,我已经将一些代码转换为引擎并添加了haml和twitter_oauth宝石)
**以上所有测试均在Rails 3RC和Ruby 1.9.2rc2中进行。
在Rackspace云服务器2GB实例上使用Thin和CentOS 5.5 - 测试App #1,有24个gem依赖项
启动env.rb- 总计=0 启动app.rb- 经过0.00110546秒。总计=0.001180052 启动boot.rb- 经过0.000600488秒。总计=0.00178644 结束boot.rb- 经过0.7935529秒。总计=0.795507318 启动require rails/all- 经过0.000189127秒。总计=0.795701199 结束require rails/all- 经过1.086998364秒。总计=1.882735263 启动Bundler require- 经过0.000109708秒。总计=1.88285043 结束Bundler require- 经过8.955853243秒。总计=10.838746673 结束app.rb- 经过0.062975913秒。总计=10.901753753 # /railties-3.0.0.rc/lib/rails/initializable.rb 启动run initializers- 经过0.000145906秒。总计=10.901910186 加载environment_config- 经过0.116689774秒。总计=11.018632298 初始化cache- 经过0.246161343秒。总计=11.320543397 active_record.initialize_database- 经过0.080047485秒。总计=11.400961893 bootstrap_hook- 经过1.034189984秒。总计=12.451309104 active_support.initialize_time_zone- 经过1.969821814秒。总计=14.448777651 action_controller.set_configs- 经过0.594991537秒。总计=15.044692126 will_paginate.active_record- 经过0.324460921秒。总计=15.386837641 will_paginate.action_view- 经过1.904889132秒。总计=17.328981523 add_view_paths- 经过0.087811847秒。总计=17.42011881 load_init_rb- 经过0.151282681秒。总计=17.709093173 load_init_rb- 经过0.362241273秒。总计=18.071865548 load_config_initializers- 经过0.144051305秒。总计=18.217433492 build_middleware_stack- 经过2.569453884秒。总计=20.826842081 eager_load!- 经过4.165919064秒。总计=24.99280168 finisher_hook- 经过0.48795935秒。总计=25.480807439 repopulate_roles- 经过0.504085662秒。总计=25.984901297 结束run initializers- 经过约0.00005秒。总计=25.985617783 结束env.rb- 经过约0.00006秒。总计=25.985683903
在Max OSX 10.5.8,2.66 Core2duo,4GB RAM上使用Mongrel - 测试App #1,有24个gem依赖项
启动boot.rb (Bundler.setup) - 经过2.0e-05秒。总计=3.1e-05 结束boot.rb (Bundler.setup) - 经过2.352435秒。总计=2.352915 启动app.rb - 经过0.084945秒。总计=2.437866 启动require rails/all- 经过0.000181秒。总计=2.438049 结束require rails/all- 经过0.489425秒。总计=2.927485 启动Bundler.require(:default, Rails.env)- 经过5.6e-05秒。总计=2.927544 结束Bundler.require(:default, Rails.env)- 经过5.16162秒。总计=8.089