bootsnap cache

bootsnap という巨大な Rails の起動を高速化できるgemがある。

このへんの内部挙動については下記の解説記事が詳しかった。

bootsnapについて調べてみた - Qiita

bootsnapは大きく分けて2つの最適化の処理をしています。

  • Path Pre-Scanning
  • Compilation caching

基本的な処理方法としては、どちらともキャッシュすることでシステムコールを叩く回数が減らし起動時間を短くしています。

Path Pre-Scanning

$LOAD_PATH と ActiveSupport::Dependencies.autoload_paths をキャッシュすることで起動の度に実行されるパスのフルスキャンをスキップしています。

Compilation caching

rubyのコードのコンパイル結果(YARV命令列)とYAMLファイルのコンパイル結果(MessagePackファイル、またはMarshalファイル)をキャッシュすることで、railsの起動時に走るこれらの処理がスキップされ起動時間が短縮されます。

実際に bootsnap 有り無しで起動してみると cache 有りの場合は 30%~50% 起動時間が短縮できた(大きければ大きいアプリケーションほど効くと思われる)。