jQuery脚本加载队列

jQuery脚本加载队列,jquery,scripting,loading,external,Jquery,Scripting,Loading,External,所以这个问题是我最近问的另一个问题的一个分支,这更像是一种好奇 我的另一个问题涉及在外部js库中动态加载。在我的示例中,我让jQuery模板导入,然后是Knockout.js,两者都使用.getScript()。每次加载完毕后,我都会发出警报,以确保加载正确 下面是我使用的大致代码(在JSFIDLE上似乎“按顺序”工作,所以它可能是我以前的代码。但问题仍然存在): 当我加载页面时,我发现敲除警报在tmpl库之前触发,即使它列在第二位 我的假设是,它们将以队列方式同步加载,等待前一个加载完成,然后

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

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

下面是我使用的大致代码(在JSFIDLE上似乎“按顺序”工作,所以它可能是我以前的代码。但问题仍然存在):

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

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


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

您的测试显然与您的假设相矛盾。没有队列,它们都同时运行。哪个先完成取决于文件大小、网络时间等

如果要确保一个库一个地加载,请在第一个库的回调函数中调用加载第二个库:

$.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!');
    });
});

您可以按照加载顺序将所有库存储在单个js文件中。这减少了作为额外奖励需要提出的请求数量

记住,不管前面的函数是否完成,javascript都会继续运行。事实上,这就是异步加载的定义。你真的以为他们会同步加载。呜呜,你说得对。我的意思是同步。顺便说一句,
ping raw.github.com::~110ms
ping cloud.github.com::~22ms
这就是为什么第二个脚本首先被加载的原因,而不是代码中的特定内容,而不是公认答案中列出的问题。感谢您现在遇到了它……是的,我猜在我的完整代码中,某种原因导致了tmpl库的加载速度变慢。不知道是什么。这种嵌套加载的方法很普遍吗?可能是因为您使用SSL?刚刚编辑了我的第一条评论,并提出了一个与您的答案相关的问题。我不知道JS的动态加载一开始有多普遍,但如果您的需求很复杂,也许您应该看看RequireJS。谢谢您的帮助!我想你已经回答了我的问题。
$.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!');
    });
});