js代码性能优化的几个方法

  相信写代码对于大部分人都不难,但想写出高性能的代码就需要一定的技术积累啦,下面是一些优化JavaScript代码性能的常见方法。

一.注意作用域

1.避免全局查找

使用全局变量和函数肯定要比局部的开销更大,因为要涉及作用域链上的查找,请看以下函数:

1  function demo1() {
2     var imgs = document.getElementByTagName("img");  //获取页面所有img标签
3
4      for(var i = 0; i <= imgs.length; i++) {
5         imgs[i].title = document.title + "image" + i;
6      }
7  }

  上面的代码每执行一次for循环都会在全局寻找document,一旦循环次数很多,那么就严重影响了性能,我们可以在for循环开始之前就把document的引用保存在一个局部变量。改进代码如下:

1 function demo1() {
2     var imgs = document.getElementByTagName("img");  //获取页面所有img标签
3     var doc = document;   //局部引用全局变量document
4
5      for(var i = 0; i <= imgs.length; i++) {
6         imgs[i].title = doc.title + "image" + i;
7     }
8  }

二.选择正确方法

1.优化循环

1 for(var i = 0; i <=imgs.length; i++) {
2    //执行代码
3 }

上面代码每次执行循环都会重新计算imgs的长度,一旦循环次数很多,那么积少成多就会影响到代码性能,我们只需在for循环执行之前把imgs的长度保存在一个变量中即可,这样就不用每次都是计算imgs的长度,改进代码如下:

1  var length = imgs.length;    //把imgs的长度保存在一个变量中
2  for(var i = 0; i <=length; i++) {
3     //执行代码
4  }    

2.尽量使用原生方法

只要有可能,使用原生方法而不是自己用javascript重写一个。原生方法是用诸如c/c++之类的编译型语言写出来的,所以要比JavaScript的快很多很多。

3.使用switch替代if-else

如果有一系列复杂的if-else语句,可以转化成单个switch语句则可以得到更快的代码。还可以通过case语句按照最可能的到最不可能的顺序进行组织,来进行进一步优化switch语句。

三.最小化语句数  

1.多个变量申明,javaScript代码中的语句数量也影响所执行的操作的速度,完成多个操作的单个语句要比完成单个操作的多个语句快。

1  //四个语句申明变量,浪费!
2  var name = "Bill";
3  var  age = 10;
4  var  sex = "man";
5
6  //一个语句申明变量,干的漂亮!
7  var name = "Bill",
8      age = 10,
9      sex = "man";

2.插入迭代值,当使用迭代值(也就是在不同的位置进行增加或减少的值)的时候,尽可能合并语句。

 //两个语句,浪费!
 var age = values[i];
 i++;

 //一个语句,干的漂亮!
 var age = values[i++];

3.使用数组和对象字面量,你可能看过两种创建数组和对象的方法:使用构造函数或是使用字面量,使用构造函数总是要用到很多语句来插入元素或定义属性,而字面量可以将这些操作在一个语句中完成。

 1  //4个语句创建和初始化数组,浪费!
 2  var values = new Array();
 3  values[0] = 123;
 4  values[1] = 456;
 5  values[2] = 789;
 6
 7  //4个语句创建和初始化对象,浪费!
 8  var person = new Object();
 9  person.name = "Bill";
10  person.age = 10;
11  person.sayName = function () {
12   console.log(this.name);
13  }
14
15  //1个语句创建和初始化数组,干得漂亮!
16  var values = [123, 456, 789];
17
18  //一个语句创建和初始化对象,干的漂亮!
19  var person = {
20        name : "bill",
21        age : 10,
22        sayName : function () {
23             console.log(this.name)
24        }
25  };
26  

四.优化DOM交互

   1.使用文档碎片减少DOM交互次数,DOM交互越多,性能越慢。

1  var list = document.getElementById("myList"),
2        item,
3        i;
4
5  for (i = 0; i <= 10; i++) {
6       item.document.createElement("li");
7       list.appendChild(item);
8       item.appendChild(document.createTextNode(" Item" + i));
9  }

上面代码每执行一次for循环都会向DOM插入新的元素,一旦for循环次数很多,那么将严重影响代码性能,所以解决办法就是减少DOM交互,于是我们使用createDocumentFragment方法创建虚拟节点,把要插入DOM的元素先插入该虚拟节点,循环完之后再把虚拟节点插入DOM,虚拟节点是不会渲染出来的,只会渲染它的子节点。改进代码如下:

 1  var list = document.getElementById("myList");
 2        fragment = document.createDocumentFragment(),
 3        i;
 4
 5  for (i = 0; i < 10; i++) {
 6       item = document.createElement("li");
 7       fragment.appendChild(item);
 8       item.appendChild(document.createTextNode("Item" + i));
 9  }
10
11  list.appendChild(fragment);

2.使用innerHTML。有两种在页面上创建DOM节点的方法:诸如createElement()和appendChild()之类的DOM方法,以及使用innerHTML。当把innerHTML设置为某个值时,后台会创建一个HTML解析器,然后使用内部的DOM调用来创建DOM结构,而非基于JavaScript的DOM调用,由于内部方式是编译好的而非解释执行的,所以执行快的多。

3.使用事件委托,把事件绑定在祖先节点,由于有事件冒泡,当事件触发时根据event对象的target属性可以知道具体事件是在那个子元素发生的。从而执行不同的行为。这样就不必每个子节点都绑定事件。

时间: 2024-10-17 23:40:28

js代码性能优化的几个方法的相关文章

jQuery代码性能优化的10种方法

1.总是使用#id去寻找element 在jQuery中最快的选择器是ID选择器 ($('#someid')). 这是因为它直接映射为JavaScript的getElementById()方法. 选择单个元素 <div id="content"> <form method="post" action="/"> <h2>Traffic Light</h2> <ul id="traffi

关于前端代码性能优化问题

以下观点纯属个人看法: 对于一个刚接触前端不久的人来说,前端的代码质量是很重要的一部分,毕竟关系到性能问题.个人认为关于代码性能优化主要由这几方面:HTML.CSS.Javascript和HTTP,所以对这四个方面的优化能提高浏览器的性能.个人知识面有限,只有学到以下的知识,另外的还没涉及,不足之处还请体谅. 一. HTML 1.首先是对HTML5的充分熟悉和理解,理解标签的语义化,减少对标签的重定义. 2.命名的规范化,对id.class.name的规范命名有助于整体代码的构建,方便他人的理解

web项目代码性能优化

这是我第一次使用博客园,以后它将陪伴我IT工作生活的一部分,以后每次有工作体会和成长我都会用它记录下来. 今天的第一篇文章是我测试的好朋友发给我的<淘宝前台系统性能分析与优化>,看完后,我结合自己开发经历整理了几个简单的编码习惯的改变,这样有助于你程序和系统系能的有限提升. 只有从小事做起,例如从注重以下几个编码习惯,虽然只能有限的提升性能,但从细节入手之后才能有更大的提升,最后才可能达到从架构和服务器方面的优化来提高系能. 以下优化措施都是非必须的,根据具体情况采取相应优化措施即可. 一.服

Babylon.js官方性能优化文档中文翻译

在这里列出Babylon.js官方性能优化文档的中英文对照,并在CardSimulate项目里对其中的一些优化方法进行实践. How To 如何 Optimize your scene 优化你的场景 Table of contents 内容列表 How To Optimize Your Scene 如何优化你的场景 Use TransformNode instead of AbstractMesh or empty meshes 使用变换节点代替抽象网格或者空网格 Changing per me

Java代码性能优化技巧

流方面: private FileOutputStream writer; writer = new FileOoutputStream(fileName); 使用BufferedOutputStream 对写入FileOutputStream的数据进行缓存 //将writer的类型由FileOutputStream 变更为BufferedOutputStream //private FileOutputStream writer; private BufferedOutputStream wr

Java 代码性能优化总结

35 个 Java 代码性能优化总结 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率

Python 代码性能优化技巧(转)

原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进.在算法的时间复杂度排序上依次是: O(1) -> O(lg n) -> O(

Android代码性能优化技巧 (一)

转载自 http://blog.csdn.net/leilu2008/article/details/6672979 我们大家都知道Android 2.2的JIT性能有了本质的提高,不过对于老版本的程序提高Java执行效率还有很多语言特点来说,对于Java 1.5之后将会有明显的改进.下面的例子来自SDK: [java] view plaincopy static class Foo { int mSplat; } Foo[] mArray = ... //上面的静态类Foo的执行效果和性能,我

C++ 代码性能优化 -- 循环分割提高并行性

对于一个可结合和可交换的合并操作来说,比如整数的加法或乘法, 我们可以通过将一组合并操作分割成 2 个或更多的部分,并在最后合并结果来提高性能. 原理: 普通代码只能利用 CPU 的一个寄存器,分割后可以利用多个寄存器. 当分割达到一个数量时,寄存器用完,性能不再提升,甚至会开始下降. 用代码来描述,如下: // 一般情况下的代码 for (i = 1; i < n+1; i++) { res = res OPER i; } // 循环分割后代码 for (i = 1; i < n; i+=2