1

私はここhttp://css-tricks.com/thinking-async/でjsの非同期スタイルのロードを実装するためのこの非常に興味深い記事を読んでいました。

私の要件は、JavaScriptファイルを非同期でロードし、正常にロードされた後にファイルから初期化メソッドを呼び出す機能です。上記の記事で説明されているように、どちらの方法が好ましい方法ですか?つまり、従来の非同期方法を使用するか、jQueryのgetscriptメソッドを使用しますか?どちらか一方を使用することのメリットまたはデメリットは何ですか?

編集:私の見解は次のとおりです:jsをロードしていて、jsファイルのロードが成功した後、初期化関数をコールバックしたいとします。これは、モジュール全体がページ中に解析および実行される必要があるため、できるだけ早く実行する必要がありますdocument.readyまたはwindow.onloadを待たずにロードします。従来の非同期方法でこれを実行しようとすると、クロスブラウザーの問題や厳密なテストに対処できる可能性がありますが、jquery ajax(またはgetscriptメソッド)を使用すると、面倒な作業を回避できます。

また、ライブラリを使用せずに単一のjsファイルを非同期でロードするこのソリューションを探しています。

4

1 に答える 1

2

編集:この答えは古く、明らかに現代のjQueryはスクリプトインジェクションを使用しています

従来の非同期方法(スクリプトインジェクションまたはHTML 5のasync属性を意味すると想定しています)を使用してJavaScriptをロードすることは非常に受け入れられており、ほとんどの非同期ローダー(RequireJSなどのAMDを含む)がそれを実装する方法です。

JQueryのgetScriptメソッドは、1日の終わりにevalを呼び出します。これは、ほとんどのまともなJS開発者が敬遠する傾向があります。

jQueryソースからのスニペット、現在613行目:

( window.execScript || function( data ) {
    window[ "eval" ].call( window, data );
} )( data );

jQueryはウィンドウオブジェクトをコンテキストとして渡し、面倒な作業を省き、(おそらくテストされていない)evalのガベージコレクションの奇妙な処理などの問題を修正します。選択したツールによっては、デバッグ中のトラッキングラインにまだ問題がある可能性があります。

私はAMDメソッド(スクリプトインジェクションを使用)の大きな支持者です。これにより、依存関係が読み込まれた直後にスクリプトを非同期で呼び出すことができ、グローバル名前空間に依存するのではなく、スクリプト間でモジュールを渡すことができます。AMDの読み込みと非同期と同期の読み込みの詳細については、RequireJSサイトで、またはこの比較的単純な要点を確認してください。

于 2012-09-21T05:18:54.930 に答える