オブジェクトの [[プロトタイプ]] を変更するとパフォーマンスが低下するのはなぜですか?
Mozilla Developer Network (MDN) は、オブジェクトの [[プロトタイプ]] を変更しないことを強く推奨しています。使用されるメソッドに関係なく、オブジェクトの [[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]] を変更することはパフォーマンスの最適化に悪影響を与えるため、避けるべきです。代わりに、Object.create() を使用して一意のプロトタイプ チェーンを持つ新しいオブジェクトを作成することをお勧めします。
以上がオブジェクトの [[プロトタイプ]] の変更が JavaScript のパフォーマンスを低下させるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。