0

したがって、この質問は私が最近尋ねた別の質問から派生したものであり、これはより興味深いものです。

私の他の質問は、外部 js ライブラリでの動的な読み込みに関するものでした。私の例では、jQuery テンプレートをインポートし、その後に Knockout.js をインポートしました。両方とも .getScript() を使用しています。それぞれのロードが完了すると、正しくロードされていることを確認するためだけにアラートを発していました。

これが私が使用していたおおよそのコードです(jsFiddleで「順番に」動作するように見えるので、以前は私のコードだった可能性があります。それでも問題は残っています。):

$.getScript("https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.js", function(){ alert('tmpl finished loading!'); });
$.getScript("http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.2.0.js", function(){ alert('Knockout finished loading!'); });

ページをロードしたときに、tmpl ライブラリが 2 番目にリストされているにもかかわらず、Knockout のアラートが tmpl ライブラリの前に発生していることを発見しました。

私の仮定では、それらはキュー形式で同期的にロードされ、前のロードが完了するのを待ってから次のロードが行われるというものでした。そうではないようです。

したがって、この仮定の検証と、なぜそうなのか/そうでないのかについての説明を求めています。また、アンロードされたスクリプトへの依存のために未定義のものの問題に遭遇しないように、スクリプトのロードをキューに入れる別の [より良い] 方法があるかどうかも知りたいです。

4

2 に答える 2

2

あなたのテストは明らかにあなたの仮定と矛盾していました。キューはなく、それぞれが同時に実行されます。どちらが最初に完了するかは、ファイル サイズ、ネットワーク タイミングなどによって異なります。

一方が他方の後に確実にロードされるようにする場合は、2 番目のライブラリをロードする呼び出しを最初のライブラリのコールバック関数に入れます。

$.getScript("https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.js", function(){
    alert('tmpl finished loading!');
    $.getScript("http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.2.0.js", function(){ 
        alert('Knockout finished loading!');
    });
});
于 2012-11-20T18:20:22.613 に答える
0

すべてのライブラリを、ロードしたい順序で 1 つの js ファイルにまとめることができます。これにより、追加ボーナスとして行う必要のあるリクエストの数が減ります!

于 2016-05-18T15:37:38.477 に答える