微优化,现代浏览器是否对其进行了优化?
Micro optimization, is it optimized anyway by modern browsers?
我最近继承了一个库,class 上有一个更新方法。这是一个例子。
onPointerMove(pointer, x, y, isPressed){
var floor = Math.floor;
var cx = this.currentX;
var cy = this.currentY;
var tm = this.toolManager;
}
这种代码大多只存在于性能关键的东西上。大部分项目的其余部分不是这样写的。
- 地板被使用了两次。每次它是 运行 时,肯定会在局部变量中缓存它只是强制一些 "temporary" 内存分配?这比简单地查找函数快多少?
- This.currentX 在函数体中被多次引用,但缓存它真的更快吗?我原以为
this.currentX
不涉及查找问题,但也许我错了。由于示例中的其余代码会发生这种情况,因此所有这些属性都会被缓存。
这些在现代 JavaScript 引擎上真的更重要吗?我会假设像这样的优化,如果它们更快的话......无论如何在 V8 中都会被视为优化的给定。例如,如果 Math.round 在一个函数中被调用了 20 次,那么引擎仍然会缓存它吗?
我还希望像在你之前缓存一段长度这样的东西 "for it" 也是我假设优化引擎在解释代码时无论如何都会做的另一个例子(同样,只有当它甚至有所作为时)。
我真正想知道的是...从今天开始,我应该进行这些微优化(针对常青浏览器)并优化我的代码,还是自 2010 年以来(当我读取性能 JavaScript)
谢谢!
不要过早优化。除非一些分析表明代码中的这些东西实际上会导致某种瓶颈或资源使用不成比例,否则不要费心根据性能理论优化它们。
至于实际性能:对象属性查找(例如 Math.floor 或 this.currentX)是 o(1) 操作,因为它们实际上是哈希映射查找。将它们保存到变量中看起来更像是一种可读性增强。
我最近继承了一个库,class 上有一个更新方法。这是一个例子。
onPointerMove(pointer, x, y, isPressed){
var floor = Math.floor;
var cx = this.currentX;
var cy = this.currentY;
var tm = this.toolManager;
}
这种代码大多只存在于性能关键的东西上。大部分项目的其余部分不是这样写的。
- 地板被使用了两次。每次它是 运行 时,肯定会在局部变量中缓存它只是强制一些 "temporary" 内存分配?这比简单地查找函数快多少?
- This.currentX 在函数体中被多次引用,但缓存它真的更快吗?我原以为
this.currentX
不涉及查找问题,但也许我错了。由于示例中的其余代码会发生这种情况,因此所有这些属性都会被缓存。
这些在现代 JavaScript 引擎上真的更重要吗?我会假设像这样的优化,如果它们更快的话......无论如何在 V8 中都会被视为优化的给定。例如,如果 Math.round 在一个函数中被调用了 20 次,那么引擎仍然会缓存它吗?
我还希望像在你之前缓存一段长度这样的东西 "for it" 也是我假设优化引擎在解释代码时无论如何都会做的另一个例子(同样,只有当它甚至有所作为时)。
我真正想知道的是...从今天开始,我应该进行这些微优化(针对常青浏览器)并优化我的代码,还是自 2010 年以来(当我读取性能 JavaScript)
谢谢!
不要过早优化。除非一些分析表明代码中的这些东西实际上会导致某种瓶颈或资源使用不成比例,否则不要费心根据性能理论优化它们。
至于实际性能:对象属性查找(例如 Math.floor 或 this.currentX)是 o(1) 操作,因为它们实际上是哈希映射查找。将它们保存到变量中看起来更像是一种可读性增强。