私は以前に同様の質問をしましたが、私の主張を正確に明確にしたことはありません。少なくとも、それを取り上げて誰かが洞察に満ちた考えを与えることができるかどうかを確認する価値があるほど関連性の高い質問だと思います。
jQueryを使用する場合、私たちの多くは、DOMがロードされjQuery.ready
たときに関数を使用してを実行します。init
これは、jQueryを使用してDOM操作プログラムをWebページに追加するデファクトスタンダードの方法になりました。関連するイベントは一部のブラウザにネイティブに存在しますが、jQueryは一部のIEバージョンなどの他のブラウザでそれをエミュレートします。例:
<head>
<script>
var init = function() { alert('hello world'); };
$.ready(init);
</script>
現在、すべてのテストで、このイベントは非常に遅くなる可能性があることが示されています。ほど遅くはありませんwindow.onload
が、実行までに約100ミリ秒の遅延が発生することがよくあります。FFの場合、特に更新時に最大200〜300ミリ秒になる可能性があります。
これらは非常に重要なミリ秒です。これは、DOM操作(ドロップダウンの非表示など)が行われる前に初期レイアウトが表示される時間であるためです。多くの場合、レイアウトの「ちらつき」は、主に低速のDOM対応イベントを使用することで発生し、プログラマーは代わりにCSSを使用して要素を非表示にし、アクセスしにくくなる可能性があります。
代わりに、bodyタグを閉じる前にスクリプトタグにinit関数を配置すると、実行速度が大幅に向上します。通常は約半分の時間ですが、場合によってはさらに高速になります。
<head>
<script>
var init = function() { alert('hello world'); };
</script>
</head>
<body>
<!-- some HTML -->
<script>init();</script>
</body>
違いを証明する簡単なテストページ:http://jsbin.com/aqifon/10
つまり、効果的なセレクターの使用に関しては、「最適化ポリス」の一部が推進しているため、ほとんど目立たない違いについては話していません。オンロードでDOM操作を行うときのいくつかの主要な遅延について話します。この例をFFで試してみると、domreadyが100倍以上遅くなることがあります(300ms対2ms)。
さて、私の質問jQuery.ready
です。他の選択肢よりも明らかにはるかに遅いのに、なぜ使用が推奨されるのですか?init
そして、BODYを閉じる前にを呼び出すことと使用することの欠点は何jQuery.ready
ですか?間違いなく「安全」に使用domReady
できますが、他のオプションよりも安全なのはどのような状況ですか?(スクリプトのようなものdocument.write
や延期されたスクリプトを考えています)私たちはBODY
多くのクライアントサイトで5年近くこの方法を使用してきましたが、問題が発生することはありません。はるかに高速です。
また、jsPerfと、10000回の実行ごとに数ミリ秒のセレクターの最適化について非常に多くのファズがあるので、なぜこれについてあまり話がないのでしょうか?これは基本的にユーザーが直面する最初の遅延であり、ページの読み込みごとに50〜100ミリ秒をスライスするのはかなり簡単なようです...