コードを実際に掘り下げるには、stackprofを試してください。
これを使用する方法の簡単な解決策は次のとおりです。gemをインストールしますgem install stackprof
。コードに次を追加require 'stackprof'
します。チェックする部分を次のように囲みます。
StackProf.run(mode: :cpu, out: 'stackprof-output.dump') do
{YOUR_CODE}
end
rubyスクリプトを実行した後、ターミナルの出力を次のように確認しますstackprof stackprof.dump
。
Mode: cpu(1000)
Samples: 9145 (1.25% miss rate)
GC: 448 (4.90%)
TOTAL (pct) SAMPLES (pct) FRAME
236 (2.6%) 231 (2.5%) String#blank?
546 (6.0%) 216 (2.4%) ActiveRecord::ConnectionAdapters::Mysql2Adapter#select
212 (2.3%) 199 (2.2%) Mysql2::Client#query_with_timing
190 (2.1%) 155 (1.7%) ERB::Util#html_escape``
ここでは、多くの時間を必要とするすべてのメソッドを確認できます。ここで素晴らしい部分です。ドリルインするだけstackprof stackprof.dump --method String#blank?
で、特定のメソッドの出力が得られます。
String#blank? (lib/active_support/core_ext/object/blank.rb:80)
samples: 231 self (2.5%) / 236 total (2.6%)
callers:
112 ( 47.5%) Object#present?
code:
| 80 | def blank?
187 (2.0%) / 187 (2.0%) | 81 | self !~ /[^[:space:]]/
| 82 | end
また、コードのどの部分の実行に時間がかかるかを簡単に把握できます。
視覚的な出力を取得したい場合はstackprof stackprof.dump --graphviz >> stackprof.dot
、graphviz(brew install graphviz
)を使用しdot -T pdf -o stackprof.pdf stackprof.dot
て美しいPDF出力を取得します。これにより、実行に時間がかかるメソッドが強調表示されます。