javascript - 对于 Javascript 游戏引擎,重新使用全局变量比制作本地变量更有效还是更不有效?

标签 javascript performance memory garbage

很多 Javascript 性能指南倾向于强调两点:

  • 保持在范围内;在每个范围内逐步查找变量的成本很高。
  • 不要通过不断创建不必要的变量来滥用垃圾收集器。

对于以 60fps 或类似高速运行的程序,性能有差异吗? JSPerf在我的系统上似乎介于两者之间,所以我想更多地了解如何针对此类内容进行优化。考虑以下两个代码示例:

var t0;

function doSomethingGlobal() {
    t0 = getWhatever();
    t0.func1();
    t0.func2();
}

诗歌

function doSomethingLocal() {
    var t0 = getWhatever();
    t0.func1();
    t0.func2();
}

http://jsperf.com/global-verses-local

最佳答案

我认为这取决于您访问全局变量的频率,以及全局变量在执行上下文中的嵌套深度。例如,从一个“更高”的执行上下文访问变量比从更高的十个级别访问变量要快(取决于 JS 引擎,我想结果和引擎优化会有所不同)。

我已经 modified your test a bit对全局变量进行 50 次访问,结果很显着,在这个特定测试中(我在 Firefox 19.0 和 Chrome 26 中进行的简短测试),本地访问快了约 5 倍。

对于所有与性能相关的问题,经验法则只能让你走到这一步。 必须对您的代码进行基准测试,并进行对您的代码有意义的优化。

关于javascript - 对于 Javascript 游戏引擎,重新使用全局变量比制作本地变量更有效还是更不有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15829147/

相关文章:

javascript - Angular 1.5 - 在具有特定属性的最后一个元素之后插入自定义元素

java - 将数据从http服务器端推送到浏览器客户端的最佳方式

javascript - 以 “safe”方式嵌入其他站点

javascript - Aurelia 与相对路线捆绑

c# - ReactiveUI - 查看定位器性能

c# - 从 c++ DLL 和 c# 中释放 SAFEARRAY

php - MySQL 查询和 PHP 脚本调整 : How can I find the problems?

.net - 有什么方法可以更改 .NET JIT 编译器以提高性能而不是编译时间?

c++ - 如果你知道地址,你能访问另一个程序的堆栈/堆吗?

c++ - 无法理解 C 和 C++ 中缓冲区大小的不同实验结果。 ifstream 也比 FILE 慢吗?