1

追記:

この以前の回答を確認しましたが、より最新で、Chrome 固有ではない回答が必要です: JavaScript オブジェクトでのキー検索のパフォーマンス

次のようなプロパティを持つ標準の JavaScript「辞書」オブジェクトを想定します。

var myObject = {
   Key1: ”Value1”,
   Key2: ”Value2”,
   Key3: ”Value3”,
   …
   Key500: ”Value500”
}

ブラウザ(など)がこれらのプロパティの取得を内部的に最適化しているかどうかは誰にもわかりませんか?

良い例は、自動ソート + 二分探索です。

あまり良くないケースは、単純な線形検索かもしれません。

EcmaScript の標準では、ブラウザーは内部処理を自由に行うことができるとされています。

[ブラウザなど] は、このドキュメントに記載されている特定のホスト オブジェクトの制限と一致している限り、実装に依存する動作で [オブジェクトの] 内部プロパティをサポートできます。

プロパティを列挙するメカニズムと順序は指定されていません。

特定の最適化を知る必要はありません。単純な線形検索を超えて最適化しようとしているかどうかを知りたいだけです。

それで、誰かが「内部」の知識を持っていますか?

4

2 に答える 2

5

ブラウザと JavaScript エンジンに依存します。Google の V8 は、プロパティへのアクセスにかかる時間を短縮するために、動的ルックアップではなく非表示のクラスを動的に作成します。非表示のクラスを使用すると、インライン キャッシュなどのクラスベースの最適化を使用できるという利点もあります。

詳細については、「プロパティへの高速アクセス」セクションを参照してくださいアイデアは基本的にこの論文から来ています: An Efficient Implementation of Self, a Dynamically-Typed Object-Oriented Language Based on Prototypes .

Internet Explorer には、プロパティへのアクセスを最適化するための "高速型システム" があります。詳細については、このプレゼンテーションをご覧ください。

Mozilla の SpiderMonkey エンジンはプロパティ キャッシュを使用します(警告: 詳細はやや時代遅れですが、基本的にはまだプロパティ キャッシュを使用しています)。

新しい IonMonkey エンジンはインライン プロパティ キャッシュを使用しますが、詳細は今のところ不十分なようです。

于 2013-04-19T18:29:23.483 に答える
2

はい。すでに述べたように、仕様はそのような最適化を必要としませんが、経験的に観察することができます。最大 500,000 個の要素を含むオブジェクトからキーが取得される速度をテストしました。(ここでテストします。ブラウザがしばらくフリーズすることに注意してください)。

キーの取得時間は、オブジェクトのサイズによって増加しません。つまり、O(1)検索の時間の複雑さがあります。

于 2013-04-19T18:46:16.150 に答える