__proto__ を変更すると JavaScript のパフォーマンスが低下するのはなぜですか?

Patricia Arquette
リリース: 2024-11-02 10:14:30
オリジナル
607 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!