Railsアプリの開発環境を速くするための調査 その1 - gemの読み込み時間
その1って書いたけど、続くかは不明。
今回は使っているgemの読み込み時間を測ってみた。
Benchmark を仕込む
config/application.rb
でgemを読み込む前に Kernel.require
を上書きして、計測する。
+require 'benchmark' +$result = {} +Kernel.singleton_class.prepend(Module.new do + def require(feature) + ret = nil + $result[feature] = Benchmark.realtime { ret = super } + ret + end +end) Bundler.require(*Rails.groups) +$result.sort_by { |_, t| -t }.take(20) + .each { |feature, time| puts "#{format("%0.3f", time)}: #{feature}" }
実際に測ってみる
tootsuite/mastodon で試してみた。
$ bin/rails runner nil 0.486: chewy 0.228: pry-byebug 0.167: charlock_holmes 0.161: fog/core 0.110: fuubar 0.105: devise-two-factor 0.101: json/ld/preloaded 0.098: omniauth-saml 0.085: goldfinger 0.077: json/ld 0.064: hamlit-rails 0.064: paperclip 0.058: health_check 0.050: fabrication 0.049: twitter-text 0.046: rqrcode 0.042: parslet 0.039: annotate 0.035: pghero 0.034: iso-639
こんな感じで読み込みに時間がかかっているgemが分かる。