JavaScript的性能优化

1. eval问题正则表达式

有eval的代码比没有eval的代码慢100倍以上。主要缘由是:函数

JavaScript 代码在执行前会进行相似“预编译”的操做:首先会建立一个当前执行环境下的活动对象,并将那些用 var 申明的变量设置为活动对象的属性,可是此时这些变量的赋值都是 undefined,并将那些以 function 定义的函数也添加为活动对象的属性,并且它们的值正是函数的定义。可是,若是你使用了“eval”,则“eval”中的代码(实际上为字符串)没法预先识别其上下文,没法被提早解析和优化,即没法进行预编译的操做。因此,其性能也会大幅度下降。性能

2. 函数的做用域链优化

依据函数的做用域链去访问变量等操做也是一个影响效率的因素。所以在函数内对于非当前做用域内变量的访问,咱们能够利用局部变量保存访问的结果,从而减小访问的次数,达到提升效率的目的。spa

3. 慎用with对象

慎用with的缘由是with增长了做用域链的层级。在with语句中访问with外的变量至关于访问上一层做用域中的变量。所以,会下降JavaScript的执行效率。ip

4. String相关作用域

  • 避免隐式类型转换

  var str = “12345678”,字符串

    arr = []; it

      for(var i = 0; i <= s.length; i++) {

      arr.push( str.charAt(i));

    }

     在调用.charAt时,str会隐式转换为new String("12345678").

     对于以下代码也会产生临时对象:

     for(var i = 0; i < str_array.length; i++) { 

    str_array[i].match(/^s*extra\s/);

  }

  /^s*extra\s/ 这个会产生临时正则表达式对象。

   var reg = /^s*extra\s/;

   for(var i = 0; i < str_array.length; i++) { 

    str_array[i].match(reg );

  }

  这样便不会有临时对象产生和销毁的开销了。

相关文章
相关标签/搜索