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生成的html出现样式问题的解决方法
Apr 16 Javascript
iphone safari不支持position fixed的解决方法
May 04 Javascript
cument.execCommand()用法深入理解
Dec 04 Javascript
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
javascript中2个感叹号的用法实例详解
Sep 04 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
node crawler如何添加promise支持
Feb 01 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 Javascript
javascript代码实现简易计算器
Jan 25 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实现建立多层级目录的方法
2014/07/19 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
用Python解决x的n次方问题
2019/02/08 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
tensorflow 模型权重导出实例
2020/01/24 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
国家助学金获奖感言
2014/01/31 职场文书
2014年档案室工作总结
2014/12/01 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python