在Ruby中运行得更快:定义别名方法还是使用alias_method?

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)

显然,你有一个方法调用较少(查找接收器......).所以它似乎更快更快.


And*_*oni 7

快速浏览源代码,将向您展示技巧:

http://www.ruby-doc.org/core/classes/Module.src/M000447.html

alias_method是用C语言编写的.此外,在ruby中定义一个调用另一个方法的方法,将导致2个方法查找和调用.

所以,alias_method应该更快.