35

最初のブラウザはIE<9で動作しなかったため、jQuery自体でうまくカバーできれば、そのダミーブラウザで遊んでみたくなかったので、window.addEventListener('DOMContentLoaded', function() {});jQueryに置き換えました。$(document).bind('ready', function() {});.attachEvent()

交換後すぐに、DOMContentLoadedページの読み込み/更新後、イベントが常に0〜2ミリ秒で発生することに気付きました(少なくともこれは私のロギングスクリプトによってログに記録されたものです)が、.ready()ページの更新後は常に少なくとも15〜20ミリ秒必要です。解雇されます(再び-スクリプトによってログに記録されます)。

私は純粋に私の好奇心を養うことを求めています、なぜそのような「重大な」遅れがあるのですか?もちろん、私にとっては問題ありません。jQueryが後でそのイベントを発生させているのです。ただ、すべての答えを知りたい(そして世界を支配したい!:])ので、それで眠ることはできません!:]

編集.ready()関数ドキュメントで一部のユーザー(Nick(Nexxar))は次のように指摘しています:「jQueryはIEで存在しない「DOMContentLoaded」イベントをシミュレートしますが、使用されるメカニズムは他のブラウザーで使用されるイベントよりもはるかに遅く発生します」 。多分これは同じです、私は求めていますか?

4

4 に答える 4

24

イベントをサポートするブラウザを想定:

  1. 実際のイベントは、任意のdocument. documentjQueryは、何を渡しても、ロードされたもののみを使用します。
  2. イベントがすでに発生している場合でも、jQuery はイベントを非同期的に発生させます。イベントがすでに発生している場合、イベントを添付'DOMContentLoaded'しても何も起こりません。

これらのブラウザーでは遅延はありません。http://jsfiddle.net/rqTAX/3/を参照してください(ログに記録されるオフセットはミリ秒単位です)。

このイベントをサポートしていないブラウザーの場合、jQuery も明らかに機能します。本物と同じではないハッキーなメカニズムを使用し、本物DOMContentLoadedと同じようにすぐに起動するとは限りませんDOMContentLoaded

// The DOM ready check for Internet Explorer
function doScrollCheck() {
    if ( jQuery.isReady ) {
        return;
    }

    try {
        // If IE is used, use the trick by Diego Perini
        // http://javascript.nwbox.com/IEContentLoaded/
        document.documentElement.doScroll("left");
    } catch(e) {
        setTimeout( doScrollCheck, 1 );
        return;
    }

    // and execute any waiting functions
    jQuery.ready();
}
于 2012-07-17T13:23:38.993 に答える
5

jQuery は、documentのイベントにバインドすることでこのイベントをシミュレートします。これは、 oldIEreadystatechangeでシミュレートする標準的な方法です。DOMContentLoaded

jQuery source によると、そのイベントは「遅く」発生しますが、前に発生しwindow.onloadます。ただし、そのイベントがいつ発生するかは正確にはわかりません。DOMContentLoadedDOM が構築されてスクリプトの準備ができたときに起動するため、その後readystatechangeに起動します。おそらく、レイアウトのレンダリングやそのようなスタイリングを待つか、レンダリング/レイアウトプロセスの後半でイベントがトリガーされますか?

いずれにせよ、おそらく IE がを「完了」に更新することを決定したため、の後に起動する可能性があります。 DOMContentLoadeddocumentreadyState

(誰かが明確な答えを持っている場合は、コメントを投稿してください。この答えを更新します。正確にいつそれが自分で起動するか知りたいのですが、ドキュメントや期待するサイトでその答えを見つけることができませんQuirksmode.)

于 2012-07-17T13:46:43.033 に答える