默认情况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);
}

最新文章

  1. EndNote(一)之基本介绍
  2. ASP.NET Core中使用URL重写
  3. Python黑帽编程2.7 异常处理
  4. Matlab中常用机器学习函数
  5. 7 HandlerSet 处理程序链表类——Live555源码阅读(一)基本组件类
  6. Unity 3D 中自动寻路 和 跟随转向 探析
  7. JavaWeb学习总结(四)—ServletConfig和ServletContext
  8. 对JavaScript莫名的愤怒
  9. Android安全相关书籍汇总
  10. Java项目依赖的配置过程
  11. 【转】如图,win7登陆界面,键盘失灵,没办法登陆。求解!如何在这个界面打开个鼠标可以点的软键盘
  12. ios面试题整理
  13. 基于Tomcat7、Java、WebSocket的服务器推送聊天室
  14. Stockbroker Grapevine
  15. Mysql 5.6 Cmake 编译安装
  16. [UVA] 11995 - I Can Guess the Data Structure! [STL应用]
  17. 彻底解决TAP(点透)提升移动端点击响应速度
  18. OCA读书笔记(13) - 性能管理
  19. MongoDB数据库安装及配置环境终极教程(windows10系统)
  20. 【转】Entity Framework 5.0系列之自动生成Code First代码

热门文章

  1. [WIN32]Win7软件部署清单
  2. [Effective JavaScript 笔记]第66条:使用计数器来执行并行操作
  3. 自定义view imageviw
  4. 用mysql++读写二进制
  5. innodb数据结构
  6. windows+caffe(三)——求取图片的均值
  7. mysql分区表的原理和优缺点
  8. 亚马逊EC2 ubuntu下安装mysql远程无法连接问题o
  9. Unity-Animator深入系列总索引
  10. IntelliJ IDEA使用(3)——IDEA连接Git