16

jsperfテストで奇妙な動作が見られます。セットアップは次のとおりです。

var pro={};
pro._x=3;
var q=Object.create(pro);
q.x=3;
q.z={};
q.z.x=3;

q.x次に、各プロパティ、q._x、およびを検索するだけq.z.xです。

シングル ルックアップq.xは、予想どおりプロトタイプ ルックアップよりも高速ですq._x。ただし、二重ルックアップq.z.xが最も高速です。q.z.x特に と比較した場合、私は最も遅いと思っていましたq.x

q.z.xよりもさらに高速ですq.z。ここで何が起こっているのですか?

4

1 に答える 1

1

より深いルックアップを高速にするのは、JavaScript エンジンが受け取ったオブジェクトを正確に認識しているため、パフォーマンスのためにコードをより最適化できるという事実です。

エンジンが通常の最適化サイクルを実行できない を使用する場合とは異なりObject.create、単純な古い空のオブジェクトを使用してオブジェクトのzプロパティを初期化するqと、基本的に、エンジンは適切なメモリを割り当て、それに応じてインデックスを作成できます。

このコードvar q=Object.create(pro);は基本的に JS エンジンに次のように伝えますObject。コードの -q.z={};言う - 「ねえ、Objectここでオブジェクトを取得しています!このデータ型に従ってメモリを確保してください」.

于 2015-05-13T13:46:38.093 に答える