许多Javascript性能指南倾向于强调两点:
对于以60fps或类似高速运行的程序,性能是否存在差异? JSPerf似乎在我的系统中介于两者之间,所以我想更多地了解如何针对这类内容进行优化。考虑以下两个代码示例:
var t0;
function doSomethingGlobal() {
t0 = getWhatever();
t0.func1();
t0.func2();
}
节
function doSomethingLocal() {
var t0 = getWhatever();
t0.func1();
t0.func2();
}
答案 0 :(得分:2)
我认为这取决于您访问全局变量的频率,以及全局变量在执行上下文中的嵌套程度。例如,从一个执行上下文“更高”访问变量会更快,而不是从十个更高级别访问一个变量(取决于JS引擎,我想结果和引擎优化会有所不同)。
我modified your test a bit对全局变量进行了50次访问,结果非常重要,本次访问的速度提高了〜5倍在此特定测试中(对于我的简短测试) Firefox 19.0和Chrome 26)。
与所有与绩效相关的问题一样,经验法则只能让你到目前为止。 您必须对您的代码进行基准测试,并对您的代码进行有意义的优化。
答案 1 :(得分:1)
请注意,您的第二个陈述并不完全正确。你说:
不要通过创建不必要的变量来滥用垃圾收集器 不断。
你想:
不要通过分配不必要的对象来滥用垃圾收集器 不断。
这不是用于存储变量问题的位置(这是区分本地和全局时所说的),因为局部变量将在堆栈上分配,这既便宜又容易。它跟踪存储在这些位置的对象,无论您存储引用的位置都会大致相同。
众所周知,全局变量的查找速度通常较慢,因此这是避免它们的一个原因。它们也更难以使用,并且导致代码更难以维护,这在我看来是避免它们的最大原因。从垃圾收集器的角度来看,没有理由选择其中一个。
最后,除非你有特别的理由相信变量访问会大大减慢你的页面速度,你为什么要担心它们的性能呢?首先编写可维护的代码!