我在具有 8GB RAM 的 2011 Macbook Pro 上运行 Ruby on Rails。我在没有选项的情况下启动 rails 需要 2 秒,加载控制台需要 12 秒。Rails 这段时间在做什么?我不敢相信这需要 12 秒。app
我的应用程序没有那么大——文件夹中有 10,607 行。
$ time rails > /dev/null
real 0m2.830s
user 0m2.751s
sys 0m0.076s
$ time echo exit | rails console > /dev/null
real 0m12.825s
user 0m11.779s
sys 0m0.898s
我正在运行 Ruby 1.9.3 和 Rails 3.2:
$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.0.0]
$ rails -v
Rails 3.2.11
$ wc -l `find app -name *.rb`
10607 total
编辑:
对一个空的 rails 项目做同样的事情(只是rails new
):
marc@menasor ~/dev/rails_empty $ time rails > /dev/null
real 0m2.192s
marc@menasor ~/dev/rails_empty $ time echo exit | rails c > /dev/null
real 0m3.807s
因此,启动一个空的 Rails 项目需要将近 4 秒。这 4 秒发生了什么?
以下是在配备 4GB RAM 的 SSD 的 Macbook Air 上启动我的原始 Rails 项目的一些时间。
$ time rails
real 0m1.161s
$ time echo exit | rails console
real 0m20.356s
所以 SDD 减少了 rails 的启动时间将近 2 秒,所以我假设是在做大量的 IO。不过,启动 rails 控制台的时间已经增加了。
编辑:
在 Reck 的建议之后添加分析数据:
Total: 404 samples
116 28.7% 28.7% 116 28.7% garbage_collector
62 15.3% 44.1% 258 63.9% Kernel#require
12 3.0% 47.0% 28 6.9% Journey::Visitors::Each#visit
12 3.0% 50.0% 12 3.0% Regexp#===
9 2.2% 52.2% 52 12.9% Module#class_eval
9 2.2% 54.5% 12 3.0% Module#module_eval
9 2.2% 56.7% 9 2.2% Module#remove_method
8 2.0% 58.7% 9 2.2% Module#enable
7 1.7% 60.4% 24 5.9% Journey::Visitors::Visitor#visit
6 1.5% 61.9% 255 63.1% Kernel#tap
5 1.2% 63.1% 237 58.7% BasicObject#instance_exec
5 1.2% 64.4% 5 1.2% Psych::Nodes::Scalar#initialize
4 1.0% 65.3% 8 2.0% Array#uniq
4 1.0% 66.3% 11 2.7% Enumerable#inject
4 1.0% 67.3% 71 17.6% Kernel#load
4 1.0% 68.3% 61 15.1% Kernel.load