为什么使用Object.setPrototypeOf()会严重影响性能

时间:2018-10-04 20:36:36

标签: javascript optimization

背景知识:我一直在为自己的学习和学习目的而实现一种用于2种方式数据绑定的库,而且我一直在逐一清除性能问题。这就是我在MDN文档顶部注意到Object.setPrototypeOf声明为

的大警告的方式
  

警告:根据现代JavaScript引擎如何优化属性访问的性质,更改对象的[[Prototype]]在每个浏览器和JavaScript引擎中都是非常缓慢的操作。对更改继承的性能的影响微妙而广泛,不仅限于在Object.setPrototypeOf(...)语句中花费的时间,还可以扩展到可以访问其[[ [原型]]已更改。如果您关心性能,则应避免设置对象的[[Prototype]]。而是使用Object.create()使用所需的[[Prototype]]创建一个新对象。

对于为什么会这样,我对此感到很好奇。

PS:对于那些好奇为什么我广泛使用Object.setPrototypeOf的人,这是项目https://github.com/muggy8/proxymity/blob/master/src/data-proto.js的那部分的源代码

1 个答案:

答案 0 :(得分:0)

由于更改对象的原型很清楚,浏览器正在缓存他如何访问其属性,因此浏览器必须进行查找才能访问新的原型,但是我认为创建新的原型不会有太大的区别。向对象添加属性,因为它将执行查找。您可以看到kyle simposon有关更改原型的答案。 kyle simpson prototype