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 相关文章推荐
10款非常有用的 Ajax 插件分享
Mar 14 Javascript
Extjs4中的分页应用结合前后台
Dec 13 Javascript
javascript原型继承工作原理和实例详解
Apr 07 Javascript
浅谈Node.js:理解stream
Dec 08 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
vue组件详解之使用slot分发内容
Apr 09 Javascript
vuex state及mapState的基础用法详解
Apr 19 Javascript
vue+webpack中配置ESLint
Nov 07 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
Jun 05 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 Javascript
vue实现直播间点赞飘心效果的示例代码
Sep 20 Javascript
javascript实现评分功能
Jun 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
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
vue小白入门教程
2018/04/02 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
python遍历目录的方法小结
2016/04/28 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
python for循环remove同一个list过程解析
2019/08/14 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
旅行社优秀创业计划书
2014/08/16 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS