背景
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 引擎所採用的內部型別最佳化。引擎必須丟棄先前編譯的程式碼並回退到未最佳化的程式碼,從而導致效能損失。
專家意見
各種專家都表達了對可變原型的擔憂:
以上是為什麼改變物件原型會導致 JavaScript 效能下降?的詳細內容。更多資訊請關注PHP中文網其他相關文章!