码迷,mamicode.com
首页 > 编程语言 > 详细

高性能javascript编程(复读1)

时间:2015-06-03 19:22:02      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

一:

  1.同样的事情发在使用src属性加载javascript的过程中,浏览器必须首先下载外部文件的代码,这要占用时间,然后解析运行此代码。此过程中,页面解析和用户交互被完全阻塞;

  2.浏览器在遇到body标签之前,不会渲染任何部分;

  3.YAHOO! 优越性能小组,关于javascript的第一条规律:讲脚本放在底部;

  4.每个HTTP请求会产生额外的性能负担,下载一个100K的文件,比下载4个25K的文件要快;可以将这些文件整合成一个文件,只需要一个<script>标签,可以减少性能损失,可以通过一个打包工具实现,或者实时工具,如"Yahoo! combo handler";

  5.保持javascript短小,并限制HTTP请求的数量;是创建反应迅速网页的第一步;

二:deferred scripts 延期脚本

非阻塞脚本的秘密在于,等页面完成加载之后,再加载javascript源码;从技术角度讲,这意味着在window的load事件之后开始下载代码;有几种方法可以实现这种效果;

(1):html4定义扩展属性:defer.---》很少用

(2):动态脚本

  var s = document.createElement("script"); s.type="text/javascript"; s.src ="file1.js";

  document.getElementsByTagName("head")[0].appendChild(s);

此文件当元素添加到页面之后立刻开始下载,此技术的重点在于:无论何时启动下载,文件的下载和运行都不会阻塞其他的页面处理过程;当文件使用动态脚本节点下载时,返回代码立即执行;当脚本是“自执行”类型时,这一机制运行正常;但是页面如果包含共页面其他的脚本调用的接口,则会带来问题;这种情况下,你需要下载完成并准备妥善的情况;可以使用动态的script节点发出事件得到相关信息;

Firefox, opera, chrome和safari3+ 会在script节点接受完成后发出一个load事件,你可以监听这事件,以得到脚本准备好的通知;

 

var s = document.createElement("script");

s.type="text/javascript";

s.onload = function(){

alert("script loaded");

}

s.src ="file1.js";

 

document.getElementsByTagName("head")[0].appendChild(s);

-----------------------------------------------------------------------------

var s = document.createElement("script");

s.type="text/javascript";

s.onreadystatechange = function(){

  if(s.readyscript ==‘loaded‘||s.readyState==‘complete‘){

    s.onreadystatechange = null;

    alert("script loaded");//可以添加回调

  }

  else

  {

    s.onload = function(){

      alert("fdfff"); //可以添加回调

    }

  }

}

s.src ="file1.js";

 document.getElementsByTagName("head")[0].appendChild(s);

三:XHR脚本注入:xmlHttpRequest script Injection

有点是同样的代码在所有的浏览器中都不会引发异常;

但是由于同源策略;不能从CDNS(content Delivery Network)下载;

大型网站一般不采用此种格式;

 var xhr = new XMLHttpRequest();

  xhr.open("get","file1.js",true);

  xhr.onreadystatechange = function()

  {

    if(xhr.readyState == 4)

    {

      if(xhr.status >= 200 && xhr.status <300 || xhr.status ==304)

      {

        var s = document.createElement("script");

          s.type="text/javascript";

          s.text = xhr.responseText;

          document.body.appendChild(s);

      }

    }

  }

xhr.send(null);

四:推荐的非阻塞模式:即:

  公共JS 用标签,其他JS用异步或者load。

 

 

  

高性能javascript编程(复读1)

标签:

原文地址:http://www.cnblogs.com/he0xff/p/4549895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!