微观优化,是否已通过现代浏览器进行了优化?

克拉克

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

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次,那么引擎仍然会缓存它吗?

我还希望像在“为它而准备”之前缓存长度之类的东西也是我认为优化的引擎在解释代码时仍要执行的另一个示例(同样,只有在它甚至有所作为的情况下)。

我真正想知道的是……从今天开始,我应该做这些微优化(针对常绿的浏览器)并优化我的代码,还是自2010年以来(现在我阅读Performance JavaScript)进行一些改进?

谢谢!

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

至于实际性能:对象属性查找(例如Math.floor或this.currentX)是o(1)操作,因为它们实际上是哈希映射查找。这样将它们保存到变量看起来比什么都具有更多的可读性增强。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将int乘以30、31、32-编译器是否真的对它们进行了优化?(有效的Java这样说)

是否对JavaScript引擎尾部调用(TCO)进行了优化?

如何找出JVM对我的代码进行了哪些优化?

是否针对C标准进行了有条件的移动优化?

“ constexpr if”与“ if”进行了优化-为什么需要“ constexpr”?

ML系列编译器是否对尾部调用进行了任何复杂的优化?

如何确定Swift是否使用优化进行了编译

是否对克隆语句进行了优化?

Kotlin的Float,Int等是否已针对JVM中的内置类型进行了优化?

我可以在PC(x86,x64)平台上使用Tensorflow lite或Tensorflow mobile吗?如果可以的话,是否已针对此平台进行了推理优化?

Excel –以升序返回唯一值的数量,已针对100,000多种情况进行了优化

Node.js:异步函数中是否对尾部调用进行了优化?

如何检查我的应用程序是否已针对Android进行了电池优化配置?

Adam优化器错误:梯度运算所需的变量之一已通过就地操作进行了修改

将数据框投射到数据集后的选择是否进行了优化?

如何确定给定的表是否对内存进行了优化?

对cakephp视图文件进行了更改,但更改未在浏览器中显示

Visual Studio是否针对超线程微处理器进行了优化?

是否对if(0)和if(1)语句进行了优化?

Ubuntu是否针对多核CPU进行了优化?

针对循环python进行了优化

是否仅对Azure表存储分区键查询进行了优化?

苹果是否已删除“针对iPhone 6和iPhone 6 Plus进行了优化”?

Ubuntu是否已针对KRACK攻击进行了修补?

在XML文件中具有所有参数是否进行了优化?

OpenCV是否在调试模式下进行了优化?

是否对不使用模板参数的模板化类的方法进行了编译器优化?

Saxon XSLT 处理器是否针对将隧道参数设置为其当前值进行了优化?

数组是否在 jOOQ 和 PostgreSQL 中进行了优化?