2011-07-29 4 views
30

可能性の重複:ブラウザはそれができる前に、すべてのJSを読ん及び解析する必要はありませんので、ちょうど</body>タグ上のJSを置く
jquery - Is $(document).ready necessary?

は、知覚ロード時間を改善しますページのレンダリングを開始します。

しかし、別の利点がありますか? $(document).ready(function() { ... })にJSをラップする必要はありません。すべての要素がすでにJSの上にあり、操作の準備が整っているからです。

  1. DOMが完全にロードされており、操作のための準備ができていることを確認するために$(document).ready必要ですか?

  2. 実行時間に違いはありますか?一方の方法はもう一方の方法より速く発火するでしょうか?

  3. ページの下部に外部JSファイル(<script src="..." />)をリンクすることはできますか、それともヘッダーにする必要がありますか?

答えて

18

このSO答えはNO 言う:

stackoveflow question

$(ドキュメント).readyがフルDOMは、関数が呼び出された時点で利用可能である保証のためです。 DOMに依存しない関数やイベントは、準備完了イベントに入れる必要はありません。また

- ページのレンダリング速度を向上させる - 非ブロック形式で動的にJavaScriptファイルを読み込む:http://berklee.github.com/nbl/https://github.com/rgrove/lazyload/

をこの手法は多少このように動作します:

var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.src = "file1.js"; 
document.getElementsByTagName("head")[0].appendChild(script); 

この新しい要素は、ソースをロードファイルfile1.js。要素がページに追加されるとすぐにファイルのダウンロードが開始されます。この手法の重要な点は、ダウンロードが開始された場所に関係なく、ファイルがダウンロードされ、他のページプロセスをブロックすることなく実行されることです。このコードは、ファイルのヘッダーに置くこともできます(ファイルのダウンロードに使用されるHTTP接続を除く)。

この本:Nickolas Zakasの "High Performance JavaScript"には、JavaScriptのパフォーマンス最適化に関する興味深い情報がたくさんあります。

関連する問題