0

所以这个问题是我最近问的另一个问题的一个分支,这更像是一个好奇心。

我的另一个问题涉及在外部 js 库中动态加载。在我的示例中,我使用 .getScript() 导入了 jQuery 模板,然后是 Knockout.js。每次完成加载后,我都会发出警报,以确保它们正确加载。

这是我使用的大致代码(似乎在 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!'); });

当我加载页面时,我发现 Knockout 的警报在 tmpl 库之前触发,即使它列在第二位。

我的假设是它们会以队列方式同步加载,等待前一个完成后再加载下一个。看来情况并非如此。

所以我要求验证这个假设,并解释为什么会/不是这样。我还想知道是否有另一种[更好的]方法来排队脚本加载,这样我就不会因为依赖未加载的脚本而遇到未定义的问题。

4

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

You could but all your libraries in a single js file in the order you would want to load them. This reduces the number of requests that need to be made as an added bonus!

于 2016-05-18T15:37:38.477 回答