railsのデフォルトのGemfileにも追加されたbootsnapを導入しただけでrailsの起動時間を10%くらい短縮できました。
この記事は個人ブログでも掲載しています。
http://tackeyy.com/blog/reduce-rails-boot-time-about-10-percent-with-bootsnap
Shopify/bootsnap
Boot large ruby/rails apps faster
大きいrubyやrailsのアプリを早くするGemです。
railsの場合、2行追加するだけなのでREADMEを見てください。
検証結果
railsの起動時間の計測用のコマンドとして time bin/rails runner "puts Rails.env"
を利用しました。
railsのデフォルトのGemfileにbootsnapを導入するPRのコメントで上記のコマンドを見かけたのでそのまま利用しています。rails runner
は知らなかったのですが、ヘルプを引いて見たところまあ計測に使っても良いかなという感じだったので採用しました。
$ bin/rails runner -h
Examples:
rails runner 'puts Rails.env'
This runs the code `puts Rails.env` after loading the app
環境
macOS Sierra 10.12.6 メモリ 16GB
rails 4.2.0
ruby 2.3.4
bootsnap導入前
$ time bin/rails runner "puts Rails.env"
development
bin/rails runner "puts Rails.env" 17.10s user 3.91s system 85% cpu 24.562 total
$ time bin/rails runner "puts Rails.env"
development
bin/rails runner "puts Rails.env" 16.77s user 3.08s system 88% cpu 22.546 total
$ time bin/rails runner "puts Rails.env"
development
bin/rails runner "puts Rails.env" 17.02s user 3.68s system 85% cpu 24.085 total
平均: 16.96s
bootsnap導入後
$ time bin/rails runner "puts Rails.env"
development
bin/rails runner "puts Rails.env" 19.36s user 3.49s system 80% cpu 28.230 total
$ time bin/rails runner "puts Rails.env"
development
bin/rails runner "puts Rails.env" 14.79s user 1.81s system 79% cpu 20.918 total
$ time bin/rails runner "puts Rails.env"
development
bin/rails runner "puts Rails.env" 14.39s user 1.43s system 79% cpu 19.823 total
平均: 16.18s
bootsnapをGemfileに追加して bundle install
を走らせた直後に1回目を計測したので遅かったのかな?と思っています。
(Gemの読み込みの問題なのか、bootsnapのキャッシュなどの処理の問題なのかはみてません)
3回目以降も計測したのですが、bootsnapを導入してからはだいたい13秒後半〜14秒後半に落ち着きました。
最後に
railsの起動が遅いとイライラするので、できるだけ早く起動したいですよね。
起動時のボトルネックを調査して対応するのも時間がかかるのでまずはサクッとbootsnapを入れてみることをおすすめします。