要真正深入了解您的代码,请尝试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 输出,其中突出显示需要长时间运行的方法。