微优化,现代浏览器无论如何都是优化的?

时间:2015-02-17 13:32:04

标签: javascript optimization

我最近继承了一个库,在类上有一个更新方法。这是一个例子。

onPointerMove(pointer, x, y, isPressed){
    var floor = Math.floor;
    var cx = this.currentX;
    var cy = this.currentY;
    var tm = this.toolManager; 
}

这种代码大多只存在于性能关键的东西上。项目的其余部分大部分都不是这样编写的。

  1. 地板使用两次。当然在局部变量中缓存它只会在每次运行时强制进行一些“临时”内存分配?这比单纯查找函数更快?
  2. 在函数体中多次引用This.currentX,但实际缓存速度更快?我原以为this.currentX不涉及查找问题,但也许我错了。由于这是在示例中的其余代码中发生的,因此所有这些属性都被缓存。
  3. 在现代JavaScript引擎上,这些内容是否真的重要?我会假设这样的优化,如果它们更快......在V8中无论如何都会被视为优化。例如,如果Math.round在一个函数中被调用了20次,那么引擎会对它进行缓存吗?

    我还希望在“你之前”缓存长度之类的东西也是我在解释代码时假设优化引擎的另一个例子(再次,只有它甚至会产生影响)。

    所有我真正想知道的是......从今天开始,我应该做这些Micro-Optimisations(适用于常绿浏览器)并优化我的代码,或者自2010年以来有所改变(当我阅读Performance时的JavaScript)

    谢谢!

1 个答案:

答案 0 :(得分:3)

不要过早优化。除非某些分析显示代码中的这些内容实际上会导致某种瓶颈或不成比例的资源使用,否则不要在性能理论上对它们进行优化。

至于实际性能:对象属性查找(例如Math.floor或this.currentX)是o(1)操作,因为它们是有效的hashmap查找。将它们保存到变量看起来更像是一种可读性增强。