首頁 >web前端 >js教程 >為什麼改變 __proto__ 會導致 JavaScript 效能下降?

為什麼改變 __proto__ 會導致 JavaScript 效能下降?

Patricia Arquette
Patricia Arquette原創
2024-11-02 10:14:30700瀏覽

Why Does Mutating __proto__ Result in Performance Degradation in JavaScript?

改變__proto__:為什麼效能會受到影響

JavaScript 中proto 屬性的文件強烈建議不要修改[ [物件的原型]],因為它對效能有不利影響。這是因為,與向 Function.prototype 添加屬性相反,更改物件的原型對現代 JavaScript 實作具有深遠的影響。

考慮以下範例:

<code class="javascript">function Foo(){}
function bar(){}

var foo = new Foo();

// This is bad: 
//foo.__proto__.bar = bar;

// But this is okay
Foo.prototype.bar = bar;

// Both cause this to be true: 
console.log(foo.__proto__.bar == bar); // true</code>

雖然兩種方法都會產生結果當 foo.__proto__.bar 設定為 bar 時,它們對效能的影響有很大不同。重新分配 Foo.prototype.bar 是可以接受的,但強烈建議不要直接更改 foo.__proto__.bar。

理解這種效能損失的關鍵在於 JavaScript 引擎採用的內部最佳化。當存取物件的屬性時,引擎會根據類型和結構推斷進行最佳化。然而,[[Prototype]] 的任何突變都會使這些最佳化失效,迫使引擎退回到較慢的非最佳化程式碼路徑。

出現這種效能損失是因為更改物件的原型本質上交換了其內部類型,破壞預編譯程式碼並刷新屬性查找最佳化。因此,現代 JavaScript 實作中的後續執行不可避免地會變慢。

此外,值得注意的是,此類原型突變也可能導致類型混淆危險,使腳本行為的推理變得更具挑戰性,並在 VM 和 中引入複雜性。 JIT 實施。因此,建議透過 Object.create() 建立具有不同原型鏈的新對象,而不是改變現有原型。

以上是為什麼改變 __proto__ 會導致 JavaScript 效能下降?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn