Yak shaving logs


My life is just yak shaving.

bootsnapを使ってrailsの起動時間を10%くらい短縮した

2017/08/07 #rails #gem #bootsnap

By Yusuke Takita


こんにちは。Takitaです。

railsのデフォルトのGemfileにも追加されたbootsnapを導入しただけでrailsの起動時間を10%くらい短縮できました。

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回目以降も計測したのですが、だいたい13秒後半〜14秒後半に落ち着きました。

最後に

railsの起動が遅いとイライラするので、できるだけ早く起動したいですよね。
起動時のボトルネックを調査して対応するのも時間がかかるのでまずはサクッとbootsnapを入れてみることをおすすめします。

このエントリーをはてなブックマークに追加

categories


最新記事


tags