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

Cla*_*ark 5 javascript optimization

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

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

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

  1. 地板使用两次.当然在局部变量中缓存它只会在每次运行时强制进行一些"临时"内存分配?这比单纯查找函数更快?
  2. 在函数体中,this.currentX被多次引用,但实际上是否更快地缓存它?我原以为这不this.currentX涉及查找问题,但也许我错了.由于这是在示例中的剩余代码中发生的,因此所有这些属性都被缓存.

在现代JavaScript引擎上,这些内容是否真的重要?我会假设这样的优化,如果它们更快......在V8中无论如何都会被视为优化.例如,如果Math.round在一个函数中被调用了20次,那么引擎会对它进行缓存吗?

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

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

谢谢!

dol*_*ldt 3

不要过早优化。除非某些分析表明代码中的这些内容实际上导致了某种瓶颈或不成比例的资源使用,否则不要费心根据性能理论来优化它们。

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