我一直有问题,我的规格代码花费的时间比预期的要长,但是当我试图在rspec-prof
下运行它们时,问题似乎消失了。最终我跟踪了差异,直到运行rake
本地比较运行它在解释器下。为什么在rake下rspec很慢? ruby_noexec_wrapper?
只运行rake
需要75秒,但运行ruby $(which rake)
只需要12秒。这比快了5倍。请看:
$ rake
~/.rvm/rubies/ruby-1.9.2-p320/bin/ruby -w -S rspec spec/args_spec.rb spec/levels_spec.rb spec/opts_spec.rb spec/run_spec.rb spec/split_spec.rb spec/unit_spec.rb
~/.rvm/gems/ruby-1.9.2-p320/gems/bundler-1.2.3/lib/bundler/source.rb:516: warning: method redefined; discarding old revision
..................................................
Finished in 1 minute 14.39 seconds
50 examples, 0 failures
$ ruby `which rake`
~/.rvm/rubies/ruby-1.9.2-p320/bin/ruby -w -S rspec spec/args_spec.rb spec/levels_spec.rb spec/opts_spec.rb spec/run_spec.rb spec/split_spec.rb spec/unit_spec.rb
..................................................
Finished in 12.88 seconds
50 examples, 0 failures
望着rake
“包装二进制”的内容显示在“#!”它解释下运行线 - ruby_noexec_wrapper
- 果然运行命令:
ruby_noexec_wrapper $(which rake)
给出了同样的慢75秒运行。
任何想法,为什么这应该是这种情况?
除了避免直接运行耙子,还有什么可以改进它吗?由于这是将宝石打包成二进制文件的标准方式,是不是可能会减慢所有宝石打包工具的速度?