為什麼修改物件的 [[Prototype]] 會成為效能殺手?
Mozilla 開發者網路 (MDN) 強烈建議不要更改物件的 [[Prototype]] 效能殺手?物件的 [[Prototype]],無論使用哪種方法。此警告源自於它對現代 JavaScript 實作造成的嚴重效能損失。
雖然建議透過Function.prototype 將成員函數加入JavaScript 類,但以下操作:
foo.__proto__.bar = bar; Foo.prototype.bar = bar;
功能上等效,並在Object.getPrototypeOf(foo)` 物件上建立一個'bar 屬性。
問題不在於建立 'bar` 屬性,而是指派給 '__proto__ 屬性本身:
fred.__proto__ = Object.prototype;
此操作破壞了屬性存取的 JavaScript 引擎最佳化。透過修改現有物件的原型鏈,您可以有效地破壞先前的所有最佳化工作。
例如,V8 JavaScript 引擎利用隱藏類別來最佳化屬性查找。更改原型鏈會使這些最佳化失效,迫使引擎回退到效率較低的方法。
該領域的專家對可變原型的性能影響表示擔憂:
以上是為什麼修改物件的 [[Prototype]] 是 JavaScript 中的效能殺手?的詳細內容。更多資訊請關注PHP中文網其他相關文章!