首页 > web前端 > js教程 > 正文

为什么改变对象原型会导致 JavaScript 性能下降?

Linda Hamilton
发布: 2024-11-02 02:22:02
原创
632 人浏览过

Why Does Mutating Object Prototypes Lead to Performance Degradation in JavaScript?

为什么改变对象的原型会损害性能

背景

JavaScript 语言提供了两种操作方法对象的prototype属性:标准的setPrototypeOf函数和非标准的__proto__属性。但是,强烈建议不要使用这些方法之一来改变对象的原型。

性能影响

根据 MDN 文档,改变原型会显着减慢速度降低现代 JavaScript 实现中的后续执行。这是因为该过程涉及更改对象的类型,这会使先前优化的代码无效并强制解释器取消优化。这个去优化过程会对性能产生重大影响。

变异方法的比较

foo.__proto__.bar = bar 和 Foo.prototype.bar = bar create Object.getPrototypeOf(foo) 对象上的 bar 属性。但是,设置 __proto__ 属性本身(如 fred.__proto__ = Object.prototype 或 Object.setPrototypeOf(fred, Object.prototype))会引发性能下降。

根本原因

更改现有对象的原型链会破坏 JavaScript 引擎采用的内部类型优化。引擎必须丢弃以前编译的代码并回退到未优化的代码,从而导致性能损失。

专家意见

各种专家都表达了对可变原型的担忧:

  • Brendan Eich:“可写的原型实现起来非常痛苦,并且会造成类型混淆的危险。”
  • Brian Hackett:“可变 proto 使得推理脚本行为变得更加困难,并使 VM、JIT 和分析实现变得复杂。”
  • Jeff Walden: “创建后的原型突变会破坏性能稳定性并影响代理和 [[SetInheritance]]。”

替代方案

而不是突变现有对象的原型,建议使用 Object.create() 创建具有不同原型链的新对象。这种方法保留了优化并避免了与原型突变相关的性能损失。

以上是为什么改变对象原型会导致 JavaScript 性能下降?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!