首页 > web前端 > js教程 > Javascript无阻塞加载具体方式_javascript技巧

Javascript无阻塞加载具体方式_javascript技巧

WBOY
发布: 2016-05-16 17:30:47
原创
1221 人浏览过

看了《高性能JavaScript》的读书笔记

几个原则:

1、将脚本放在底部

还是在head中,用以保证在js加载前,能加载出正常显示的页面。

<script>放在</body>前。</p> <p><strong>2、成组脚本</strong></p> <p>由于每个<script>标签下载时阻塞页面解析过程,所以限制页面的<script>总数也可以改善性能。适用于内联脚本和外部脚本。</p> <p><strong>3、非阻塞脚本</strong></p> <p>等页面完成加载后,再加载js代码。也就是,在window.load事件发出后开始下载代码。</p> <p>(1)defer属性:支持IE4和fierfox3.5更高版本浏览器</p> <p><script defer>...</script>

内联和外部文件

带defer属性的<script>可出现在文档的任何位置,对应的js文件将在<script>被解析时启动下载,但代码不会执行,直到DOM加载完毕(在onload事件句柄被调用之前)。所以实现了和也卖弄其他资源一起并行下载。</p> <p>(2)动态脚本元素</p> <p>文档对象模型(DOM)允许你使用js动态创建HTML的几乎全部文档内容。<br></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="81426" class="copybut" id="copybut81426" onclick="doCopy('code81426')"><u>复制代码</u></a></span> 代码如下:</div> <div class="codebody" id="code81426"> <br>var script=document.createElement("script"); <p>script.type="text/javascript";</p> <p>script.src="file.js";</p> <p>document.getElementByTagName_r("head")[0].appendChild(script);<br></p> </div> <br>此技术的重点在于:无论在何处启动下载,文件额下载和运行都不会阻塞其他页面处理过程。即使在head里(除了用于下载文件的http链接)。 <p>(3)The YUI3 approach</p> <p>理念:用一个很小的初始代码,下载其余的功能代码,先引入文件:<br></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="73140" class="copybut" id="copybut73140" onclick="doCopy('code73140')"><u>复制代码</u></a></span> 代码如下:</div> <div class="codebody" id="code73140"> <br><script type="text/javascript src=http://files.jb51.net/file_images/article/201306/yuanma/combo.js></script>


此种子文件大约10KB,

使用:

复制代码 代码如下:

YUI().use("dom",function(Y){

  Y.Dom.addclass(...)

})


当所有代码可用时,回调函数被调用,YUI实例作为参数传入,就可以立即使用新下载的功能。

The LazyLoad library

使用:先引入:lazyload-min.js

(4)

复制代码 代码如下:

LazyLoad.js("a.js",function(){

Appliction.init();

})


多个文件:
复制代码 代码如下:

LazyLoad.js(["a.js","b.js"],function(){

Application.init();

})


(5)The LABjs library

先引入:lab.js

复制代码 代码如下:

$LAB.script("a.js").wait(function(){

Application.init();

})


多个文件,就链式写法

他的独特之处在于能够管理依赖关系。

可以通过wait()函数指定哪些文件应该等待其他文件。

例如:b.js的代码保证不在a.js之前运行

复制代码 代码如下:

$LAB.script("a.js").wait().script("b.js").wait(function(){

Application.init();

})


这样,虽然两个文件是并行下载的,却能保证a.js能在b.js之前执行
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板