高性能javascript编程(复读1)

一:

  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。

  

时间: 2024-10-11 16:13:05

高性能javascript编程(复读1)的相关文章

高性能JavaScript 编程实践

前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的有些内容还是相当不错的,譬如第八章编程实践,为了方便以后的查阅,对此做个总结.失效的代码也会在以后做更进一步的探索. 避免双重求值 这个优化策略很好理解,我们可能都已经不知不觉地运用在了实际的编程中: // not use this setTimeout('alert("hello world&qu

高性能javascript编程(复读2)

---------------------------------------------- 1.请求数据(request data) 有5种常用技术用于向服务器请求数据:XMLHttpRequest,dynamic script tag insertion(动态脚本标签插入),iframes,comet,multiparty XHR(多部分的xhr): (1)xhr :一般用get和post请求,当URL的参数长度超过了2048个字符时,才使用post提交数据:因为IE限制URL的长度,过长将

读高性能JavaScript编程 第二章 让我知道了代码为什么要这样写

代码为什么要这样写? function initUI(){ var doc = document, bd = doc.body, links = doc.getElementsByTagName_r("a"), i = 0, len = links.length; while(i < len){ update(links[i++]); } doc.getElementById("go-btn").onclick = function(){ start(); }

读高性能JavaScript编程 第四章 Conditionals

if else 和 switch    &&    递归 if else 和 switch 一般来说,if-else 适用于判断两个离散的值或者判断几个不同的值域.如果判断多于两个离散值,switch表达式将是更理想的选择. 如同 我们在写sql 总习惯把可以过滤掉更多的where 放在前面一样,当 if else 判断的离散值较多时也因该这么干. 二分搜索法: if (value == 0){ //要优化的代码 return result0; } else if (value == 1)

读高性能JavaScript编程 第一章

草草的看完第一章,虽然看的是译文也是感觉涨姿势了, 我来总结一下: 由于 大多数浏览器都是 single process 处理 ui updatas and js execute 于是产生问题: js (script tag) will blocking page processing 上图说话: 于是大家动脑筋想办法 想到了三个办法 1. Parallel downloads, then execute  并行下载,然后执行. 2.Download times less,Less downlo

读高性能JavaScript编程学英语 第一章第三页第二段话

Script Positioning 脚本位置 The HTML 4 specification indicates that a <script> tag may be placed inside of a <head> or <body> tag in an HTML document and may appear any number of times within each. Traditionally, script> tags that are use

《高性能javascript》 领悟随笔之-------DOM编程篇(二)

<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档.DOM编程性能一直以来都是非常受开发者关注的话题,如何编写高性能的DOM是前端开发必不可少的技能. 1.重绘与重排 当浏览器加载完页面所有的元素.js.css.图片之后会自动生成两个数据结构: 1.dom树 (图片为转载) 如图所示,dom树表示了整个页面文档的结构,通过访问dom树我们可以得到某

高性能JavaScript DOM编程

转自(学习之用) 作者:韩子迟 网址:http://www.cnblogs.com/zichi/p/4713031.html 我们知道,DOM是用于操作XML和HTML文档的应用程序接口,用脚本进行DOM操作的代价很昂贵.有个贴切的比喻,把DOM和JavaScript(这里指ECMScript)各自想象为一个岛屿,它们之间用收费桥梁连接,ECMAScript每次访问DOM,都要途径这座桥,并交纳“过桥费”,访问DOM的次数越多,费用也就越高.因此,推荐的做法是尽量减少过桥的次数,努力待在ECMA

《高性能javascript》一书要点和延伸(上)

前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的收获. 第一章 加载和执行 基于UI单线程的逻辑,常规脚本的加载会阻塞后续页面脚本甚至DOM的加载.如下代码会报错: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8