Ruby 调用 ruby 实例方法时,加上 self 更快

ginchenorlee · 2013年11月12日 · 最后由 ginchenorlee 回复于 2013年11月13日 · 3782 次阅读

直接上 code:

class A

  def a_method
    b_method
  end

  def b_method
  end

end


class B

  def a_method
    self.b_method
  end

  def b_method
  end

end

区别在于在调用实例方法时是否加上 self.
代码

1..10000000.times do
  a = A.new
  a.a_method
end

#时间为:
real    0m5.647s
user    0m5.623s
sys     0m0.003s

1..10000000.times do
  b = B.new
  b.a_method
end

#时间为
real    0m5.630s
user    0m5.603s
sys     0m0.007s

多次计算后 都显示加上 self 后,更块。 也有人说这个加不加 self 性能有 10 倍之差 求原理,先献上一个 ^_^

结果不是没什么区别吗?

我记得有个说法是当调用属性方法时 self[:attr] 比 self.attr 方法要快,原因是因为方法调用都是很慢的 但加不加 self 没有听过 好像是 peepCode 的视频里讲的

#1 楼 @luikore 有啊,加 self 访问确实要快点点。但是那天听到有人说,这个加不加 self 差距有 10 倍。所以来求证一下。平时你是习惯加还是不加 self 呢?

感觉结果的差距不是很明显啊。。。。

#7 楼 @xifengzhu 因为 demo 类比较简单,可能差别不是很大,但是数据显示,每次带 self 的都要快那么点点,估计如果类复杂点 差距会大点

小蝌蚪找爸爸

#9 楼 @dddd1919 这个解释很赞。但是对于不知道的人来说,这个解释跟没解释一样。LOL

#10 楼 @ch3n LOL 啥意思?撸啊撸?

假设你的结论是正确的,1000 万次差 0.0x 秒,那么赶时间啊。

不加 self 可能要查找的东西多一点

#14 楼 @luikore 最后一句太彪悍!

#12 楼 @zgm 论证一下看看到底有没有所说的 10 倍只差

需要 登录 后方可回复, 如果你还没有账号请 注册新账号