直接上 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 的视频里讲的
#7 楼 @xifengzhu 因为 demo 类比较简单,可能差别不是很大,但是数据显示,每次带 self 的都要快那么点点,估计如果类复杂点 差距会大点
第一次调用的查找区别是比较大,但由于 inline method cache, 第二次调用之后就只有取 self.class 和 nilclass 的区别了,取一般对象 class 和 nil 的 class 最多就差一两条指令吧。
主频上 G 的处理器 (10 亿指令/秒), 算起来调用千万次也是差 0.0x 秒。
看到 self.
我都会删掉 (你以为在写 python 呀!)