js异步加载的三种解决方案


Posted in Javascript onMarch 04, 2013

默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页头会导致加载很慢的话,是会严重影响用户体验的。

(1) defer,只支持IE
defer属性的定义和用法(我摘自w3school网站)
defer 属性规定是否对脚本执行进行延迟,直到页面加载为止。
有的 javascript 脚本 document.write 方法来创建当前的文档内容,其他脚本就不一定是了。

如果您的脚本不会改变文档的内容,可将 defer 属性加入到 <script> 标签中,以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。
示例:

<script type="text/javascript" defer="defer"> 
alert(document.getElementById("p1").firstChild.nodeValue); 
</script>

(2) async
async的定义和用法(是HTML5的属性)
async 属性规定一旦脚本可用,则会异步执行。
示例:
<script type="text/javascript" src="demo_async.js" async="async"></script>

注释:async 属性仅适用于外部脚本(只有在使用 src 属性时)。
注释:有多种执行外部脚本的方法:
•如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
•如果不使用 async 且 defer="defer":脚本将在页面完成解析时执行
•如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本

(3) 创建script,插入到DOM中,加载完毕后callBack,见代码:

function loadScript(url, callback){ 
var script = document.createElement_x("script") 
script.type = "text/javascript"; 
if (script.readyState){ //IE 
script.onreadystatechange = function(){ 
if (script.readyState == "loaded" || 
script.readyState == "complete"){ 
script.onreadystatechange = null; 
callback(); 
} 
}; 
} else { //Others: Firefox, Safari, Chrome, and Opera 
script.onload = function(){ 
callback(); 
}; 
} 
script.src = url; 
document.body.appendChild(script); 
}
Javascript 相关文章推荐
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
JQUERY 设置SELECT选中项代码
Feb 07 Javascript
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
jquery 按键盘上的enter事件
May 11 Javascript
javascript实用方法总结
Feb 06 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
Bootstrap图片轮播组件使用实例解析
Jun 30 Javascript
Vuex之理解state的用法实例
Apr 19 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
使用jQuery实现掷骰子游戏
Oct 24 jQuery
javascript实现移动端触屏拖拽功能
Jul 29 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 #Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
Mar 04 #Javascript
在图片上显示左右箭头类似翻页的代码
Mar 04 #Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
Mar 04 #Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
Mar 04 #Javascript
JavaScript实现自己的DOM选择器原理及代码
Mar 04 #Javascript
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 #Javascript
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
PHP获取网站域名和地址的代码
2008/08/17 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
php截取视频指定帧为图片
2016/05/16 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
Python完全新手教程
2007/02/08 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
信息科学与技术专业求职信范文
2014/02/20 职场文书
运动会的口号
2014/06/09 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
行政复议决定书
2015/06/24 职场文书
校运会新闻稿
2015/07/17 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
python中数组和列表的简单实例
2022/03/25 Python