在过去的4个月里,我一直在做网络项目。为了优化代码性能,我们使用了一个模式。我的疑问是,它是否真的提高了性能?
当我们必须使用this
对象时,我们将它赋给一个局部变量,并使用它。
function someFunction()
{
var thisObject = this;
//use thisObject in all following the code.
}
这里的假设是,将this
对象赋给局部堆栈变量将提高性能。
我在任何地方都没有见过这种类型的编码,所以怀疑它是否没有用处。
编辑:我知道将这个对象赋值给局部变量是为了保留对象,但这不是我们的情况。
发布于 2012-04-16 14:40:08
虽然这是Javascript中的一种常见做法,但出于性能原因,它是而不是。将this
对象保存在另一个命名的local中通常是为了在函数中定义的回调中保留this
的值。
function someFunction() {
var thisObject = this;
var someCallback = function() {
console.log(thisObject === this); // Could print true or false
};
return someCallback;
}
thisObject === this
的计算结果是否为true将取决于它的调用方式
var o = {}
o.someFunction = someFunction();
var callback = o.someFunction();
callback(); // prints false
callback.call(o); // prints true
发布于 2012-04-16 15:10:56
与所有性能问题一样,应该通过实际测量性能来检查它们。在rather simple test case中(您的实际代码可能会有所不同),我发现不同的浏览器都有不同的结果:
Chrome和Firefox在两个测试中没有太大区别,但两者之间的细微差别是在相反的方向上。IE9使用保存的this
副本进行测试,我称之为self
,它的速度要慢得多。
如果Chrome、火狐和IE9在性能上的显著差异表明this
测试用例要快得多,我想你可以得出结论,你所询问的设计模式并没有在不同的浏览器之间提供一致的性能提升。
在我的代码中,只有在内联事件处理程序、回调或this
被设置为其他值的方法中,为了一致引用原始对象而需要它时,我才会将this
的副本保存到另一个变量。换句话说,我只在需要的时候应用这个设计模式。
在previous discussion of this design pattern here on SO中,我们得出的结论是,一些库使用此设计模式是为了允许额外的最小化,因为this
不能缩小到它所占用的四个字符以下,但将其分配给局部变量可以缩小为单字符变量名。
发布于 2012-04-16 14:43:20
即使这种优化有(积极的)效果,它也很可能依赖于解释器。
其他版本可能会恢复结果。
然而,最终你应该去测量,而不是猜测。
https://stackoverflow.com/questions/10176209
复制