高性能javascript读书笔记之 如何管理你的javascript代码

HTML4规范指出<script>标签可以放在HTML文档的<head>或<body>中,并允许出现多次。

浏览器的阻塞特性:当浏览器在执行javscript代码时,不能同时做其他任何事情,javascript执行过程耗时越久,浏览器等待响应的时间就会越长。

注:浏览器在解析到<body>标签之前,不会渲染页面的任何部分。
       IE8及以上,其它新版浏览器允许并行下载javascript文件。

性能问题:把脚步放在页面顶部将会导致明显的延迟,通常表现为显示页面空白,用户无法浏览内容。

解决方法:
1.将所有的<script>标签尽可能放在<body>标签的底部,以减少对整个页面下载的影响。
注:雅虎特别性能小组提出的优化javascript的首要规则:将脚本放在底部。

2.减少页面包含的<script>标签数量(无论外链脚本还是内嵌脚本),合并脚本文件(使用压缩工具)。
即:减少javascript文件大小及限制http请求数。

3.defer属性: HTML4 中的属性,带有defer属性的<script>标签可以放置在文档的任何位置,对应的javascript文件将在解析到<script>标签时开始下载,但并不会执行,直到DOM加载完成。
<script defer>
     alert(‘defer');
</script>
<script>
     alert(’script');
</script>
<script>
     window.οnlοad= function() {
       alert(‘load');
     }
</script>
弹出顺序:script,defer,load
注:带有defer属性的<script>元素是在onload事件处理器执行之前被调用。

4. async 属性:是 HTML5 中的新属性, async 属性规定一旦脚本可用,则会异步执行。 如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
<script type="text/javascript" src="demo_async.js"  async="async"></script>
注释:async 属性仅适用于外部脚本(只有在使用 src 属性时)。

5.动态加载脚本:无论在何时启动下载,文件的下载和执行过程不会阻塞页面其他进程。

function loadScript(url,callback) {
     var script = document.createElement(“script");
     script.type = “text/javascript”;
     
     if (script.readyState) {   //IE
           script.onreadystatechange = function() {
              if (script.readyState == “load” || script.readyState == “complete”) {
                    script.onreadystatechange = null;
                    callback();
               } 
          };
     }else {
          script.onload = function() {
               callback();
          };
     }

     script.src = url;
     document.getElementByTagName(“head”)[0].appendChild(script);
}

6.使用XMLHttpRequest(XHR)对象获取脚本并注入到页面中。

var  xhr = new XMLHttpRequest();
xhr,open(“get”,”file.js”,true);//启动一个请求,以备发送,是否异步发送请求
xhr.onreadystatechange = function() {
     if (xhr.status == 4) {
           if (hr.status >=200 && xhr.status < 300 || xhr.status == 304) {            
               var script = document.createElement(“script");
               script.type = “text/javascript”;
               script.text = xhr.responseText;
               document.body.appendChild(script);
          }
     }
};
缺点:javascript文件必须与所请求的页面处于相同的域,不能从CDN下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值