gpt4 book ai didi

javascript - Object.observe() 如何影响性能?

转载 作者:可可西里 更新时间:2023-11-01 01:50:19 27 4
gpt4 key购买 nike

Object.observe() JavaScript API 允许任何代码段接收任何 JavaScript 对象的所有属性更改的更改通知。

这不会严重影响 JavaScript 引擎(即 V8)可以执行的代码生成和性能优化吗?生成的 native 代码现在似乎必须检查每次写入如果必须生成更改通知,则发送给对象。无法静态确定给定对象是否设置了通知。因此无法优化检查。

由于此 API,任何符合标准的 JavaScript 引擎现在似乎都陷入了永久和严重的性能损失。

最佳答案

现代 JavaScript 引擎利用内联缓存和自适应重新编译技术来最大限度地减少动态调度对生成代码的影响。

如果我们谈论的是 V8,那么对象是否被观察到的事实被编码在它的隐藏类中。内联缓存 stub 和优化代码都已经根据某些预期值检查隐藏类以确定对象是否具有预期形状。同样的检查提供了关于对象是否被观察到的信息。因此,与非观察对象一起使用的代码路径没有任何变化。开始观察对象的处理方式与改变对象的形状相同:对象的隐藏类被切换为不同的类,并设置了观察位:您可以阅读 Runtime_SetIsObserved看到这个。

类似的推理适用于在优化代码中省略守卫的系统部分,而是根据“形状”假设取消优化代码:一旦一个对象被观察到,所有优化代码取决于该对象未被观察到的假设取消优化。因此,没有为未观察到的对象支付任何价格。

也就是说,当前 V8 中 Object.observe 的实现让观察到的对象付出了高昂的代价,因为它对其进行了规范化(将它们变成字典表示)并且需要通过运行时系统进行往返以进行观察记录。但在以后显着降低此成本方面并没有固有的技术困难。

关于javascript - Object.observe() 如何影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com