我一直有問題,我的規格代碼花費的時間比預期的要長,但是當我試圖在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秒運行。
任何想法,爲什麼這應該是這種情況?
除了避免直接運行耙子,還有什麼可以改進它嗎?由於這是將寶石打包成二進制文件的標準方式,是不是可能會減慢所有寶石打包工具的速度?