Jak*_*son 6 javascript jquery asynchronous modernizr yepnope
我有以下内容:
Modernizr.load([
{
load : '//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js',
complete : function () {
if ( !window.jQuery ){
Modernizr.load('/js/jquery-1.6.2.min.js');
}
}
},
{
load : ["/js/someplugin.js", "/js/anotherplugin.js"],
complete : function()
{
// do some stuff
}
},
{
load: ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js'
}
]};
Run Code Online (Sandbox Code Playgroud)
我读到Modernizr加载脚本Asyncronously.但在上面的例子中,哪些是异步加载?
是否所有以下内容都是异步加载的?
或者它是异步和有序加载的组合,如下所示:
我很难测试它是哪种情况.
Ben*_*yne 12
你已经选择了一个相当复杂的例子进行剖析.所以让我们分步进行.
{...},{...},{...}将按顺序执行.someplugin.js同时和异步地加载和"anotherplugin.js".所以它们将被并行下载.当你可以同时并行两个项目时,这是很棒的,因为这是今天浏览器的"最薄弱的环节"(仅限IE,其他每个浏览器将同时并行6-8个文件).记住modernizr是一个工具集合.包含的加载器实际上只是一个重新包装的yepnope.所以你可以谷歌更多关于yepnope.
顺序加载的想法是能够确保依赖性按顺序加载(例如,jQuery插件必须在jQuery框架之后加载).参数集二中并行下载语法的目的是加速多个不相依的文件的性能(例如,一旦加载jQuery,你可以并行加载多个jQuery插件,只要它们不依赖于彼此) .
所以为了回答你的问题,你的假设#2是正确的.如果您想使用firebug进行更多探索,请console.log在每个参数集的完整函数中添加一些语句.您应该每次都看到3组按顺序完成.现在将firebug切换到"Net"选项卡以观察文件请求是否已经消失.文件someplugin.js和'anotherplugin.js`不一定每次都以相同的顺序加载.请求将按顺序发出,但是时序条应该重叠(将它们显示为并行).在本地测试这将很难,因为它会如此之快.将您的两个测试文件放在某个地方的慢速服务器上,或者将它们与您期望的相反(使第一个文件为1mb,第二个<1kb),这样您就可以在firebug的网络监视器选项卡中看到重叠的下载(这只是出于测试目的的人工场景,您可以使用重复的JS注释来填充文件,以便制作人工缓慢的文件进行测试.
编辑:为了更准确地澄清一下,我想在yepnopejs.com主页上添加引用.yepnopejs是在modernizr中包含(和别名)的资源加载器:
简而言之,无论你把它们放在哪个顺序,这就是我们执行它们的顺序.'load'和'both'文件集是在'yep'或'nope'设置之后执行的,但是你在这些集也保留了下来.这并不意味着文件总是按此顺序加载,但我们保证它们按此顺序执行.由于这是一个异步加载器,我们同时加载所有内容,我们只是延迟运行它(或注入它)直到时间恰到好处.
所以是的,您可以放置jquery,然后在同一个Modernizr.load语句中添加一些插件,它们将被并行下载并按照参数中指定的顺序注入DOM.你在这里唯一放弃的是测试jQuery是否成功加载的能力,如果有必要,可能会获取jQuery的备份非CDN版本.因此,您可以选择重要的后备支持.(我没有任何消息来源,但我似乎记得谷歌CDN在其整个生命周期中只下降过一次)
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |