• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 网页制作 > JavaScript >

LAMP 调优之:JavaScript 性能调优(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-07点击:

  但是这样并不是最好的方式,JavaScript 有个特点,对于 object 对象来说,其属性访问层级越深,效率越低,比如这里的“myObj”已经访问到了第 3 层,我们可以这样改进一下:

  清单 7. 缩小对象访问层级

  1. var myObj = … ..  
  2.  ..  
  3. function process(){  
  4. var doc = document;  
  5.    var images = doc.getElementsByTagName("img"),  
  6. widget = doc.getElementsByTagName("input"),  
  7. combination = [];  
  8. for(var i = 0; i < images.length; i++){  
  9. combination.push(combine(images[i], widget[2*i]));  
  10. }  
  11. var ctn = myObj.container; 
  12. ctn.property1 = combination[0]; 
  13. ctn.property2 = combination[combination.length-1]; 
  14.      }  

  我们用局部变量来代替“myObj”的第 2 层的“container”对象。如果有大量的这种对对象深层属性的访问,可以参照以上方式提高性能。

  字符串(String)相关

  字符串拼接

  经常看到这样的代码:

  清单 8. 字符串简单拼接

  1. str += “str1” + “str2” 

  这是我们拼接字符串常用的方式,但是这种方式会有一些临时变量的创建和销毁,影响性能,所以推荐使用如下方式拼接:

  清单 9. 字符串数组方式拼接

  1. var str_array = [];  
  2. str_array.push(“str1”);  
  3. str_array.push(“str2”);  
  4. str = str_array.join(“”); 

  这里我们利用数组(array)的“join”方法实现字符串的拼接,尤其是程序的老版本的 Internet Explore(IE6)上运行时,会有非常明显的性能上的改进。

  当然,最新的浏览器(如火狐 Firefox3+,IE8+ 等等)对字符串的拼接做了优化,我们也可以这样写:

  清单 10. 字符串快速拼接

  1. str +=“str1” 
  2. str +=“str2” 

  新的浏览器对“+=”做了优化,性能略快于数组的“join”方法。在不久的将来更新版本浏览器可能对“+”也会做优化,所以那时我们可以直接写:str += “str1” + “str2”。

  隐式类型转换

  参考如下代码:

  清单 11. 隐式类型转换

  1. var str = “12345678”, arr = [];  
  2. for(var i = 0; i <= s.length; i++){  
  3. arr.push( str.charAt(i));  
  4. }

  这里我们在每个循环时都会调用字符串的“charAt”方法,但是由于我们是将常量“12345678”赋值给“str”,所以“str”这里事实上并不是一个字符串对象,当它每次调用“charAt”函数时,都会临时构造值为“12345678”的字符串对象,然后调用“charAt”方法,最后再释放这个字符串临时对象。我们可以做一些改进:

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ