Szy*_*Jeż 8 ruby performance pointer-aliasing
以后调用的速度更快:
def first_method?() second_method?() end
Run Code Online (Sandbox Code Playgroud)
要么
alias_method :first method, :second_method
Run Code Online (Sandbox Code Playgroud)
如果可能的原因?
(注意:我不问什么更好/更好等等 - >只有原始速度以及为什么它更快有趣这里)
und*_*gor 13
至少在Ruby 1.8.6中,别名似乎更快:
#!/usr/local/bin/ruby
require 'benchmark'
$global_bool = true
class Object
def first_method?
$global_bool
end
def second_method?
first_method?
end
alias_method :third_method?, :first_method?
end
Benchmark.bm(7) do |x|
x.report("first:") { 1000000.times { first_method? }}
x.report("second:") { 1000000.times { second_method? }}
x.report("third:") { 1000000.times { third_method? }}
end
Run Code Online (Sandbox Code Playgroud)
结果是 :
$ ./test.rb
user system total real
first: 0.281000 0.000000 0.281000 ( 0.282000)
second: 0.469000 0.000000 0.469000 ( 0.468000)
third: 0.281000 0.000000 0.281000 ( 0.282000)
Run Code Online (Sandbox Code Playgroud)
显然,你有一个方法调用较少(查找接收器......).所以它似乎更快更快.
快速浏览源代码,将向您展示技巧:
http://www.ruby-doc.org/core/classes/Module.src/M000447.html
alias_method是用C语言编写的.此外,在ruby中定义一个调用另一个方法的方法,将导致2个方法查找和调用.
所以,alias_method应该更快.