J**ascript无阻塞加载具体方式

时间:2016.05.08 发布人:ludaoyuan

J**ascript无阻塞加载具体方式

已解决问题

谷歌ludaoyuan用户在2016.05.08提交了关于“批改网J**ascript无阻塞加载具体方式”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-10-24T10:20:35。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !

希望以下的回答,能够帮助你。

第1个回答

用户名:flyben  

看了《高性能J**aScript》的读书笔记

几个原则:

1、将脚本放在底部

<link>还是在hea搞d中,用以保在js加载前,能加载出正常显示的页面。

<script>放在</body>前。

2、成组脚本

由于来今具督钟缺立每个<script>标签下载时阻塞页面解析过程,所以限制页面的<script>总数也可以改善性能垂川频古二民今践耐。适用于内联脚本和外部脚本。

3、非阻塞脚本

等页面完成加载后,再加载js代码。也就是,在window.load事件发出后开始下载代码。

(1)defer属性:支持IE4和fierfox3来自.5更高版本浏览器

<s脚指criptdefer></script>

联和外部文件

带defer属性的<script>可出现在文档的领但任何位置,对应的js文件将在<script>被解析时启动下载,但代码不会执行,直到DOM加载完毕(在onload事件句柄被调用之前)。所以实现了和也卖弄其他资源一起并行下载。

(2)动态脚本元素

文翟象模型(DOM)允许你使用js动态创建h**TML的几乎全部文档内容。

问答制代码代码如下:
varscript=document.createElement("script");

script.ty胜pe="text/j**ascript";

script.src="file.js";

document.get采略女该ElementByTagName_r("head")[0].appendChild(script);


此技术的重点在于:无论在何处启动下载,文检弱殖答件额下载和运行都不会阻塞其他页面处理过程。即使在head里(除了用于下载文件的http链接)测顾许划。

(3)TheYUI3源界引县感空在端旧approach

理念:用一个很小的初始代码,下载其余的判气造温模穿止攻景京功能代码,先引入文件:

复制代杂毛良般刑发效穿手百码代码如下:
<s争穿都器策打科日判间cripttype="text磁损油死置沙把补/j**ascriptsrc=http://files.***.net/file_images/article/201306/yuanma/combo.js></script>


此种子文件大约10KB,

使用:

复制代码代码如下:
YUI().use("dom",function(Y){

  Y.Dom.addclass()

})


陈娘脸所有代码可用时,回调函数被调用,YUI实例作为参祖自米件销数传入,就可以立即使用新下载的功能。

TheLazyLoadlibrary

使用:先引入:举报呢lazyload-min.js

(4)

复制代码代码如下:
LazyLoad.js("a.js",function(){

Appliction.init();

})


多个文件:

复制代码代码如下:
LazyLoad.js(["a.js","b.js"],function(){

Application.init();

})


(5)TheLABjslibrary

先引入: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之前执行