8 GB の 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 コンソールを起動する時間は長くなりました。
編集:
レックの提案の後にプロファイリング データを追加する:
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