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 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
Jquery中删除元素的实现代码
Dec 29 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
微信小程序入门之广告条实现方法示例
Dec 05 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
微信小程序如何实现五星评价功能
Oct 15 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
微信小程序云函数添加数据到数据库的方法
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 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
python算法学习之计数排序实例
2013/12/18 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
python 链接和操作 memcache方法
2017/03/04 Python
python tornado微信开发入门代码
2018/08/24 Python
python组合无重复三位数的实例
2018/11/13 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
python selenium操作cookie的实现
2020/03/18 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
创业计划书撰写原则
2014/01/25 职场文书
初三新学期计划书
2014/05/03 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
会议室管理制度范本
2015/08/06 职场文书
python实现进度条的多种实现
2021/04/29 Python
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
JS class语法糖的深入剖析
2022/07/07 Javascript