0
function Obj()
{
this.prop = { a: 1, b: 2 };
this.access();
access(this.prop);
}
Obj.prototype.access = function()
{
// accessing 'this.prop' directly
}
function access(property)
{
// accessing 'this.prop' through local reference 'property'
}
どのくらいのパフォーマンスヒットのは、オブジェクト参照を介して間接的にObj.prop
にアクセスする際に生じる(グローバルaccess()
機能に見られるように)VS直接(Obj
年代access()
法に見られるように)、そしてその理由は?Javascript - 参照を介してオブジェクトにアクセスすると、パフォーマンスが大幅に低下しますか?
あなたの2つのケースに違いはありません。それが 'this'か' foo'かどうか、あなたはまだ 'x.y'をやっています。 – ssube
@ssube私の理解は以下の通りであり、以下のページでさらに説明されています:http://gameprogrammingpatterns.com/data-locality.html - メモリ内の任意の場所のデータへの参照を指します。そのデータに間接的にアクセスすると、ほとんどの場合、ローカルデータと連続していないため、「キャッシュミス」が発生します。その結果、データが取得されるのを待つ間にCPUが停止し、パフォーマンスが低下します。これはJavascriptにも当てはまりますか、それとも最適化が行われていますか? – sookie
@sookie:この種の最適化は、もしあれば、javascriptのコンパイラ/インタプリタによってのみ行われます。しかし、いいえ、中間変数を使用するかどうかにかかわらず、参照のルックアップは常に同じ数になりますので、違いはありません。そして、それらを繰り返すと、キャッシュ(コンパイルされたコードまたはCPU自体のいずれか)がこれを処理します。 – Bergi