【发布时间】:2013-03-22 12:58:03
【问题描述】:
我的规范代码运行时间比预期的要长,但当我尝试在rspec-prof 下运行它们时,问题似乎消失了。最终,我发现了在本地运行 rake 与在解释器下运行它的区别。
仅运行 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 秒。
任何想法为什么会这样?
除了避免直接运行 rake 之外,还有什么可以改进的吗?既然这是将 gem 包装成二进制文件的标准方法,那难道不会降低所有 gem 打包工具的速度吗?
【问题讨论】: