编写高性能Javascript

编写高性能Javascript

多年来,Javascript一直在web应用开发中占据重要的地位,但是很多开发者往往忽视一些性能方面的知识,特别是随着计算机硬件的不断升级,开发者越发觉得Javascript性能优化的好不好对网页的执行效率影响不明显。但在某些情况下,不优化的Javascript代码必然会影响用户的体验。因此,即使在当前硬件性能已经大大提升的时代,在编写Javascript代码时,若能遵循Javascript规范和注意一些性能方面的知识,对于提升代码的可维护性和优化性能将大有好处。

  下面给出编写高性能的Javascript代码的若干建议:

  1、尽量不要用for-in 循环去访问数组,建议用 for 循环进行循环: 

 1        function foo1() {
 2         var i, b, c=[1,2,3];
 3         for (i in c) {
 4             b = c[i];
 5             if(b === "2")
 6                 return b;
 7         }
 8     }
 9      //性能更好
10     function foo2() {
11         var i, b, c=[1,2,3];
12         for (i=0;i<c.length;i++) {
13             b = c[i];
14             if(b === "2")
15                 return b;
16         }
17
18     }   

  2、建议将对象进行缓存处理,特别是DOM访问是比较消耗资源的:

 1     //c.length没有缓存,每次迭代都要计算一下数组的长度
 2     function foo1() {
 3         var i, b, c=[1,2,3];
 4         for (i=0;i<c.length;i++) {
 5             b = c[i];
 6             if(b === "2")
 7                 return b;
 8         }
 9     }
10      //性能更好,第一次将数组的长度缓存到变量l中,第二次及后续的循环无需计算数组长度
11     function foo2() {
12         var i, b, c=[1,2,3],l;
13         for (i=0,l=c.length;i<l;i++) {
14             b = c[i];
15             if(b === "2")
16                 return b;
17         }
18     }

 1     //document.getElementById(‘info‘)没有缓存,每次都要遍历DOM
 2     function foo1() {
 3         var e;
 4         document.getElementById(‘info‘).innerHTML="call 1";
 5         document.getElementById(‘info‘).innerHTML="call 2";
 6
 7     }
 8      //性能更好,第二次无需访问DOM
 9     function foo2() {
10        var e=document.getElementById(‘info‘);
11        e.innerHTML="call 1";
12            e.innerHTML="call 2";
13     }

  3、建议不要在函数内进行过深的嵌套判断:

      //函数内嵌套判断语句过多
     function foo1() {
            var r={};
            r.data={};
            r.data.myProp=2;
            if (r) {
            if (r.data) {
                if (r.data.myProp) {
                    //逻辑处理
                }
                else {
                    //逻辑处理
                }
            }
    }

    }
     //性能更好
    function foo2() {
         var r={};
          r.data={};
          r.data.myProp=2;
        if (!r) return;
        if (!r.data) return;
        if (r.data.myProp) {
            //逻辑处理
        } else {
             //逻辑处理
        }
    }    

  4、避免循环引用,防止内存泄漏:

 1 //需要jQuery
 2 function foo1(e,d) {
 3     $(e).on("click", function() {
 4            //对d进行逻辑处理
 5              cbk(d);
 6                     }
 7       });
 8 }
 9
10 //打破循环!
11 function foo2(e, d) {
12     $(e).on("click", cbk(d));
13 }
14 function cbk (d) {
15  //逻辑处理
16 }         

  5、建议避免在函数内返回一个未声明的变量,会污染外部变量:

1 function foo(a, b) {
2     r = a + b;
3     return r; //r未声明,则创建了一个全局变量
4 }

  6、var声明变量,建议写在多行

 1 //自己测试结果是foo1快,但也有一种观点是foo2快
 2 function foo1() {
 3     var c = 1;
 4     var sum=0;
 5     var d = 0;
 6     var e;
 7 }
 8
 9 function foo2() {
10     var c = 1,sum=0, d = 0, e;
11 }

说明:其实单个函数时间上差别较小,这里采用循环多次用累计时间进行性能对比,不同PC配置或者浏览器测试结果可能存在差异。

时间: 2024-08-06 20:06:06

编写高性能Javascript的相关文章

【JavaScript】【译】编写高性能JavaScript

英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地优

【译】编写高性能JavaScript

原文:http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/ 作者:Addy Osmani 译者按:本人第一次翻译外文,言语难免有些晦涩,但尽量表达了作者的原意,未经过多的润色,欢迎批评指正.另本文篇幅较长.信息量大,可能难以消化,欢迎留言探讨细节问题.本文主要关注V8的性能优化,部分内容并不适用于所有JS引擎.最后,转载请注明出处: ) ===================

编写高性能JavaScript【转】

英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地优

【编写高性能JavaScript】

英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8 引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地

高性能JavaScript(您值得一看)

众所周知浏览器是使用单进程处理UI更新和JavaScript运行等多个任务的,而同一时间只能有一个任务被执行,如此说来,JavaScript运行了多长时间就意味着用户得等待浏览器响应需要花多久时间. 从认知上来说,解析器解析一个界面的时候都是从上至下依次解析的,这就是说界面上出现多少个<script>标签(不管是内联还是外部文件),页面下载和解析必须停止等待脚本下载完成并运行完成(注意这里包括运行),这个过程当中,页面解析和用户交互是被完全阻塞的. Javascript第一条定律:将脚本放在底

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

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

写高性能JavaScript

很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地优化你的应用程序.这并不是说应该专门为某一浏览器或引擎做优化,千万别这么做. 但是,你应该问自己

《高性能javascript》pdf

下载地址:网盘下载 如果你使用JavaScript构建交互丰富的Web应用,那么JavaScript代码可能是造成你的Web应用速度变慢的主要原因.<高性能JavaScript>揭示的技术和策略能帮助你在开发过程中消除性能瓶颈.你将会了解如何提升各方面的性能,包括代码的加载.运行.DOM交互.页面生存周期等.雅虎的前端工程师Nicholas C. Zakas和其他五位JavaScript专家介绍了页面代码加载的最佳方法和编程技巧,来帮助你编写更为高效和快速的代码.你还会了解到构建和部署文件到生

高性能JavaScript阅读简记(二)

三.DOM Scripting DOM编程 我们都知道对DOM操作的代价昂贵,这往往成为网页应用中的性能瓶颈.在解决这个问题之前,我们需要先知道什么是DOM,为什么他会很慢. DOM in the Browser World 浏览器中的DOM DOM是一个独立于语言的,使用XML和HTML文档操作的应用程序接口(API).浏览器中多与HTML文档打交道,DOM APIs也多用于访问文档中的数据.而在浏览器的实现中,往往要求DOM和JavaScript相互独立.例如在IE中,JavaScript的