Javascript无阻塞加载具体方式


Posted in Javascript onJune 28, 2013

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

几个原则:

1、将脚本放在底部

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

<script>放在</body>前。

2、成组脚本

由于每个<script>标签下载时阻塞页面解析过程,所以限制页面的<script>总数也可以改善性能。适用于内联脚本和外部脚本。

3、非阻塞脚本

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

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

<script defer>...</script>

内联和外部文件

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

(2)动态脚本元素

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

var script=document.createElement("script");
script.type="text/javascript";
script.src="file.js";
document.getElementByTagName_r("head")[0].appendChild(script);

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

(3)The YUI3 approach

理念:用一个很小的初始代码,下载其余的功能代码,先引入文件:

<script type="text/javascript src=//img.jbzj.com/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之前执行
Javascript 相关文章推荐
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
Jul 09 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
Mar 09 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 Javascript
js生成word中图片处理方法
Jan 06 Javascript
vue.js移动数组位置,同时更新视图的方法
Mar 08 Javascript
JavaScript数组去重算法实例小结
May 07 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 Javascript
Extjs4 类的定义和扩展实例
Jun 28 #Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 #Javascript
jquery异步跨域访问代码
Jun 28 #Javascript
基于SVG的web页面图形绘制API介绍及编程演示
Jun 28 #Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 #Javascript
jquery中通过父级查找进行定位示例
Jun 28 #Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 #Javascript
You might like
php中转义mysql语句的实现代码
2011/06/24 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
php常用数学函数汇总
2014/11/21 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python Kmeans算法原理深入解析
2019/08/23 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
放飞蜻蜓反思
2014/02/05 职场文书
购房意向书
2014/04/01 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
公司晚会策划方案
2014/05/17 职场文书
求职信的正确写法
2014/07/10 职场文书
雷锋的观后感
2015/06/10 职场文书
为自己工作观后感
2015/06/11 职场文书
2015年教师节广播稿
2015/08/19 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书