3

スクリプトの効率を向上させるために、暗黙的なウィンドウ参照を明示的にするために使用できることをMSDNで読みました。self

  1. これが本当かどうか知っていますか?これは基本的に、たとえば呼び出しが以前にオブジェクトなしself.locationで単純に呼び出すよりも効率的であることを意味しますか?locationwindow

  2. MSDN テキストはではselfなくを参照しているためwindow、このパフォーマンスの向上は を使用した場合にのみ発生しselfますか? ここ によるwindowselfwindow.selfは同じものなので、何を使っても問題ないはずです。

  3. さらに、MSDNの呼び出しで述べられていることに従うと、呼び出しwindow.selfよりも何らかの形でパフォーマンスが向上するはずselfです。これは、最後の呼び出しがプロパティであるwindowため、呼び出しによってwindow.self明示的な参照を使用するためです。

ありがとう

4

2 に答える 2

2

これは、実際には完全に時間の無駄であるマイクロ最適化の一種ですが、価値のある一般的なイディオムは、次のように Javascript を記述することです。

(function(window, undefined) {
  // your code, thousands of lines of sheer beauty
})(this);

これにより、「ウィンドウ」へのローカル参照と、起動するための信頼できる「未定義」変数が得られます。

なぜそれは時間の無駄なのですか?通常のコードの場合、実行時間はせいぜい1 ミリ秒か 2 ミリ秒です。誰もそれに気付くことはありません。コーディングに使用している実際のアルゴリズムが適切であることを確認し、Javascript インタープリター/JIT 開発者にそれらのミリ秒を削ってもらいます。このようなことに夢中になると、インタープリターによって最適化されない奇妙なことを行ってしまうため、将来的に実行速度が遅くなるコードになる可能性があります。

于 2010-09-02T12:55:36.550 に答える
1

これはマイクロ最適化にすぎませんが、プロパティの直接参照は変数の検索よりも常に高速です。を記述するlocationと、次のようなことが実行されます。

  1. location現在のスコープで宣言されているものを探し、見つかった場合は戻り、終了します。
  2. スコープ階層を 1 つ上に移動します。
  3. スコープがグローバルでない場合は、1 に進みます。スコープがグローバルである場合はlocation、グローバル スコープでチェックし、見つかった場合は戻ります。そうでない場合は、宣言されていない変数エラーをスローします。

ステートメントを使用してオブジェクト プロパティのスコープを作成することに対しても、同様のケースが行われます。with同じことがself、 のプロパティでもある にも当てはまりますwindowselfは への参照windowであるため、window.locationよりも高速である必要がありますwindow.self.location。また、実装が異なる可能性があるため、マイレージはブラウザごとに異なる場合があることに注意してください.

Pointy が「指摘」したように、ほとんどの開発者は、このようなマイクロ最適化について心配する必要はありません。違いはマイクロ秒であり、エンド ユーザーにはまったく気付かれません。

参考文献:

于 2010-09-02T13:00:30.467 に答える