JavaScript优化:全局缓存数学函数

Tri*_*tan 2 javascript optimization

我正在对我正在编写的JavaScript游戏引擎进行一些"极端"优化.而且我注意到我经常使用数学函数!而且我目前只在我使用它们的函数本地缓存它们.所以我将使用下面的代码在窗口对象的全局级别缓存它们.

var aMathFunctions = Object.getOwnPropertyNames(Math);

for (var i in aMathFunctions)
{
    window[aMathFunctions[i]] = Math[aMathFunctions[i]];
}
Run Code Online (Sandbox Code Playgroud)

这有什么重大问题或副作用吗?我是否会覆盖窗口中的现有功能,是否会大幅增加内存占用量?或者还有什么可能出错?

编辑:以下是关于JavaScript优化的阅读摘录,引导我尝试这一点.

财产深度

嵌套对象以使用点表示法是命名空间和组织代码的好方法.不可思议的是,在性能方面,这可能是一个问题.每次在这种情况下访问值时,解释器必须遍历您嵌套的对象才能获得该值.值越深,遍历越多,等待的时间越长.因此,尽管命名空间是一个很好的组织工具,但保持尽可能浅的东西是获得更快性能的最佳选择.YUI库的最新版本演变为从命名空间中消除整个嵌套层.例如,YAHOO.util.Anim现在是Y.Anim.

参考:http://www.phpied.com/extreme-javascript-optimization/

pim*_*vdb 6

编辑:由于此次修订,Chrome中不再重要; 也许缓存现在更快.


不要这样做,使用全局函数时要慢得多.

http://jsperf.com/math-vs-global

在Chrome上:

sqrt(2);      - 12,453,198  ops/second
Math.sqrt(2); - 542,475,219 ops/second
Run Code Online (Sandbox Code Playgroud)

至于内存使用情况,另一方面全球化也不会坏.你只需创建另一个参考; 函数本身不会被复制.