【发布时间】:2014-03-11 12:47:14
【问题描述】:
根据this answer to 'Is object empty?':
// Speed up calls to hasOwnProperty
var hasOwnProperty = Object.prototype.hasOwnProperty;
我在小型 JavaScript 库中看到了几个类似的实现,例如:
var slice = Array.prototype.slice;
//or
function slice(collection) {
return Array.prototype.slice.call(collection);
}
我做了一个快速的jsperf 来测试这种事情,缓存看起来比不缓存快一点,但我的测试可能有缺陷。
(我使用“缓存”这个词来表示将方法存储在变量中。)
这个问题的上下文是开发人员何时需要多次调用本机方法,以及可观察到的差异是什么。
缓存本机方法是否可以防止引擎在每次调用方法时都必须在对象内部查找该方法,从而使缓存成为一种更快的方式来调用本机方法,无论何时开发人员需要调用同一个本机方法不止一次?
【问题讨论】:
-
是什么让您认为这与方法的原生性有关?正在优化的部分,重复的属性查找,应该是完全不可知的 w.r.t。正在查找什么(事实上,我无法想象一个非人为的方案可能会有所作为)。
-
这节省的是搜索属性的嵌套原型链。
-
@delnan 对于简单的原生方法,优化的影响可能更为显着,因为它们的实现速度很快,而且名称查找占调用时间的比例更大。
-
看看那些 jsPerf 结果,性能提升几乎是不存在的。
标签: javascript