微观优化,是不是被现代浏览器优化了

Micro optimization, is it optimized anyway by modern browsers?

本文关键字:优化 浏览器 是不是 微观      更新时间:2023-12-24

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

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不涉及查找问题,但也许我错了。由于这种情况发生在示例中的其余代码上,因此所有这些属性都被缓存

这些在现代JavaScript引擎上真的重要吗?我认为这样的优化,如果它们更快的话。。。。将被视为V8内部优化的给定条件。例如,如果Math.round在一个函数中被调用了20次,那么引擎无论如何都会缓存它?

我还希望像在"for it"之前缓存一个长度这样的东西,也是我认为优化引擎在解释代码时无论如何都要做的另一个例子(同样,只有当它产生影响时)。

我真正想知道的是……从今天起,我应该做这些微优化(针对常青浏览器)并优化我的代码,还是从2010年开始(当我阅读Performance JavaScript时)

谢谢!

不要过早地进行优化。除非一些评测显示代码中的这些东西实际上会导致某种瓶颈,或过度的资源使用,否则不要按照性能理论来优化它们。

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