我一直在为过去4个月Web项目。 要优化我们使用模式的代码的性能。 我的疑问是,它实际上提高性能或不?
当过我们必须使用this
对象,我们把它分配给一个局部变量,并使用它。
function someFunction()
{
var thisObject = this;
//use thisObject in all following the code.
}
这里的假设是,分配this
对象的局部堆栈变量将提高性能。
我还没有看到这种类型的编码任何地方,所以怀疑它是否是没有用的。
编辑:我知道这个分配对象局部变量是保护对象来完成,但是这不是我们的情况。
虽然这是在Javascript中一种常见的做法是不是因为性能原因来完成。 在的保存this
对象在另一个地方命名通常是为了保存价值this
被函数中定义的跨回调。
function someFunction() {
var thisObject = this;
var someCallback = function() {
console.log(thisObject === this); // Could print true or false
};
return someCallback;
}
无论thisObject === this
计算结果为真,将取决于它如何被称为
var o = {}
o.someFunction = someFunction();
var callback = o.someFunction();
callback(); // prints false
callback.call(o); // prints true
正如所有的性能问题,应通过实际测量的性能进行检查。 在一个相当简单的测试案例 (实际代码可能会有所不同部分),我发现不同的浏览器不同的结果:
![](https://www.manongdao.com/static/images/pcload.jpg)
Chrome和Firefox没有什么不同的两个测试之间非常多,但略有不同的是两者之间相反的方向。 IE9显示使用的保存的副本测试this
我把它叫做self
是显著慢。
如果没有在Chrome和火狐和IE9一个显著和一致的性能差异显示了this
快是基本的测试案例,我想你可以得出结论,你问的设计模式约不提供跨浏览器一致的性能提升。
在我的代码,我的副本保存this
只有当我需要它内联事件处理程序,回调或方法的内部一致的参照原对象,其中另一个变量this
已被设置为别的东西。 换句话说,在需要的时候我才适用这种设计模式。
在这里所以这个设计模式,前面的讨论 ,得出的结论是一些图书馆采用这种设计模式,以便使更多的最小化,因为this
不能说是占据了四个大字下面精缩,但其分配到一个局部变量可以被精缩到一个单独的字符变量名。
即使在这种优化中的(积极)的效果,很可能取决于解释。
另一版本可以恢复的结果。
然而,你到底应该测量,而不是猜测。