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 相关文章推荐
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
jquery选择器使用详解
Apr 08 Javascript
jQuery中last()方法用法实例
Jan 06 Javascript
jQuery为某个div加入行样式
Jun 09 jQuery
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
vue中组件的过渡动画及实现代码
Nov 21 Javascript
JavaScript常见鼠标事件与用法分析
Jan 03 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
Vue+webpack实现懒加载过程解析
Feb 17 Javascript
JavaScript自定义超时API代码实例
Apr 30 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
Python松散正则表达式用法分析
2016/04/29 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
python多线程同步实例教程
2019/08/11 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python代码中怎么换行
2020/06/17 Python
Python如何读写二进制数组数据
2020/08/01 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
股指期货心得体会
2014/09/13 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
Python 中random 库的详细使用
2021/06/03 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python
MySQL transaction事务安全示例讲解
2022/06/21 MySQL