2

location.hrefはwindow.location.hrefよりも高速です。しかし、内部的にlocation.hrefはwindow.location.hrefとして読み取られていますよね?では、どのようにして大幅なパフォーマンスを向上させるのでしょうか。

4

4 に答える 4

9

location.hrefはwindow.location.hrefよりも高速です。

非常に高速かもしれませんが、実際には何も気付かないでしょう。理由は次のとおりです。

エンジンが(理論的には)見たときに何をするかを次に示しますlocation.href

  • location現在のスコープで検索します。見つからない場合は、包含スコープなどに移動し、最終的にグローバルスコープに到達します。
  • グローバルスコープでlocationは、グローバルオブジェクトのプロパティとして検出されます。
  • 次にhref、オブジェクトのプロパティを検索しlocationます。

エンジンが(理論的には)見たときに何をするかを次に示しますwindow.location.href

  • window現在のスコープで検索します。見つからない場合は、包含スコープなどに移動し、最終的にグローバルスコープに到達します。
  • グローバルスコープでwindowは、グローバルオブジェクトのプロパティとして検出されます。これは、グローバルオブジェクトがそれ自体を参照するために使用するプロパティです。
  • 次にlocation、そのオブジェクトのプロパティを検索します。
  • 次にhref、オブジェクトのプロパティを検索しlocationます。

そのため、JavaScriptエンジンが適用できる可能性のある最適化を除いて、window.location.hrefプロパティルックアップが1つ多く必要になります。location.hrefしかし、JavaScriptのパフォーマンスはエンジンごとに非常に異なります。あなたのマイレージは異なる場合があります。これは、 FB55がまとめたベンチマークであり、上記の理論が実験結果によって裏付けられていることを示しています。確かに速いです。その特定のテストで。location.href

無償のベンチマークスクリーンショット

(青= location.href、赤= window.location.href;長い線=より速いパフォーマンス。)

もっと要点:それは本当に重要ですか?現実の世界ではありません。人間が知覚できる違いがあるためには、これを何百万回も実行する必要があります。locationしかし、それが、 (または他のグローバル、組み込み、または独自のコードによって追加された)グローバルについて人々がこれを言っているのを見る理由の説明です。

于 2012-05-05T12:02:04.583 に答える
1

これに関するいくつかの考え:

  • ブラウザでwindowは、はグローバルオブジェクトであるため、割り当てられたすべてのプロパティに参照せずにアクセスできます。どちらの場合も、変数は周囲のすべてのスコープで検索する必要があります(読み取り:ウィンドウオブジェクトも検索する必要があります)。
  • コストのかかる検索を回避するために、最近のほとんどのブラウザは「インラインキャッシング」(IC)と呼ばれる手法を実装しました。簡略化すると、常に正しいオブジェクトを指していることを意味します。

とにかく、私は簡単なベンチマークを作成しました。どうやら、直接アクセスはより高速です(少なくともChromeでは)。

于 2012-05-05T12:09:55.417 に答える
1

document.locationは非推奨になりました。window.locationはグローバルオブジェクトであるため、場所だけでアクセスできます。

ロケーションオブジェクトには、複数のプロパティとメソッドがあります。文字列として使用しようとすると、location.hrefのように機能します。安全を期すために、常にlocation.hrefを使用するのが最善です。

于 2012-05-05T11:59:43.080 に答える
0

一見すると、それらは同じことをします。フレームを使用している場合、それらは異なる動作をする可能性があります。

その場合、それらは異なる値を返す可能性があり、おそらくフレームの入れ子の複雑さに応じてパフォーマンスの違いがありますが、フレームのものを無視すると、同時に同じことを行う必要があります。

これについてどこで読んだかを明記してください。

HTH

于 2012-05-05T12:01:10.597 に答える