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 相关文章推荐
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
Feb 03 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
简单模拟node.js中require的加载机制
Oct 27 Javascript
jQuery实现扑克正反面翻牌效果
Mar 10 Javascript
Angular.js中$resource高大上的数据交互详解
Jul 30 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
js 客户端打印html 并且去掉页眉、页脚的实例
Nov 03 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
Dec 14 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
JS继承定义与使用方法简单示例
Feb 19 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
用header 发送cookie的php代码
2007/03/16 PHP
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
初步讲解Python中的元组概念
2015/05/21 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
判断网页编码的方法python版
2016/08/12 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
python添加菜单图文讲解
2019/06/04 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
写给女朋友的道歉信
2014/01/08 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python