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 相关文章推荐
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 Javascript
javascript设计模式 封装和信息隐藏(上)
Jul 24 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
『jQuery』名称冲突使用noConflict方法解决
Apr 22 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
javascript实现dom元素可拖动
Mar 21 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
jQuery插件Echarts实现的渐变色柱状图
Mar 23 jQuery
JavaScript数组_动力节点Java学院整理
Jun 26 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
Jul 19 Javascript
vue单个组件实现无限层级多选菜单功能
Apr 10 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Js 本页面传值实现代码
2009/05/17 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
Js获取事件对象代码
2010/08/05 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
vue观察模式浅析
2018/09/25 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python 重定向获取真实url的方法
2018/05/11 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
pytorch中图像的数据格式实例
2020/02/11 Python
tensorflow常用函数API介绍
2020/04/19 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
PyQt5实现画布小程序
2020/05/30 Python
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
2014年生产部工作总结
2014/12/17 职场文书
总账会计岗位职责
2015/04/02 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js