Javascript的代码性能建议

1、尽量使用变量和常量,减少使用数组和对象成员

 2、尽量减少使用动态作用域

   - 避免使用with语句

   - 由于try-catch也会改变作用域链,最好将错误处理委托给一个函数来处理用以避免catch中过多访问局部/全局变量

   - 减少使用eval语句(非常危险)

3、小心使用闭包

   - 由于闭包跨越作用域,导致性能下降

   - 由于闭包与其关联作用域对象共享活动对象,导致关联对象无法销毁(直到闭包被销毁),这带来额外内存开销,IE中会导致内存泄漏

4、尽量减少使用嵌套成员,最好在一个‘.’操作符就能够访问到对象成员

5、属性或方法在原型链中的位置越深,效率越低,实例成员的访问速度优于原型成员

6、如许多次访问对象成员、数组元素、跨域变量和多级嵌套成员,应尽量使用局部变量替代

7、字符串连接

   - 使用+和+=运算符在非IE7及以下版本的浏览器中效率都高于其他方式连接

   - 使用+和+=时,尽量将被连接字符串变量放在左边,并且尽量避免产生临时变量

     举例如下:

     var str = "abc";

     str += "def" + "ghi";

     由于表达式的从左到右计算的特点,"def"+"ghi"先执行并产生临时字符串"defghi",然后执行str+"defghi";

     可以改为:str += str + "def" + "ghi"; 这样执行就是(str + "def") + "ghi",不会产生临时字符串;

     当然如果程序如下,也会产生临时字符串:

     str = "def" + str + "ghi";

     这个将会产生两个临时字符串,"def"+str产生一个,然后其结果和"ghi"的合并还会产生一个;

   - IE7及以下版本浏览器中,Array.prototyp.join方法的效率远远高于+和+=,但在其他浏览器中数组连接字符串的效率是最低的

   - String.prototyp.concat的效率也稍慢于+和+=

 8、使用Object/Array直接量来初始化

   - 例如:

     var obj = new Object();

     obj.name = 'Maculish';

     obj.age = 22;

     obj.gender = 'M';

     var arr = new Array();

     arr[0] = 'Maculish';

     arr[1] = 22;

     arr[2] = 'M';

     和以下用直接量创建的对象/数组相比,直接量创建的大小会更小,运行速度会更快

     var obj = {

         name: 'Maculish',

         age: 22,

         gender: 'M'

     };

var arr = ['Maculish', 22, 'M'];

尤其是要初始化的对象属性越多或数组元素越多,则性能优势越明显。

原文地址:https://www.cnblogs.com/Maculish/p/2844569.html