javascript循环性能大比拼

原创|其它|编辑:郝浩|2010-01-29 09:52:05.000|阅读 870 次

概述:在设计选择器,我就做了这方面的比较,只不过这次幸运遇到另一个测试程序,它覆盖面更广,测试类型更全面。最后发现自己在选择器中用了一个很慢的循环……囧。由于IE性能比较低下,原程序根本无法运行,因此我把它移到我的博客上来,汉化一下,并减少大量的测试个数(原程序测试个数为1000,我把IE的测试个数减少为300)。但即使这样,它还是弹出警告框问你是否中止循环,你继续按否,就能看到结果了。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

在设计选择器,我就做了这方面的比较,只不过这次幸运遇到另一个测试程序,它覆盖面更广,测试类型更全面。最后发现自己在选择器中用了一个很慢的循环……囧。由于IE性能比较低下,原程序根本无法运行,因此我把它移到我的博客上来,汉化一下,并减少大量的测试个数(原程序测试个数为1000,我把IE的测试个数减少为300)。但即使这样,它还是弹出警告框问你是否中止循环,你继续按否,就能看到结果了。

由上面的实验我们基本上可得出以下结论:

  1. while循环比for循环快。
  2. 倒序循环比顺序循环快。
  3. 缓存length属性比不缓存快。
  4. 请不要用arr[i]来判断是否中止循环。
  5. 请不要在循环内声明变量,用它来引用数组元素,若真的想省几个字符,请在循环外声明。
  6. 除非是循环对象的属性,请不要用for...in循环。
  7. 请不要用JavaScript 1.6 的forEach迭代器,特慢!

由于javascript与DOM紧密相连,操作DOM基本上是操作其中的元素节点,因此我觉得基本上以下几个循环就够用:

01.//顺序
02.for(var i=0,n=arr.length;i<n;i++){}
03.  
04.var i = 0, n= arr.length; while (i<n) { i++; } 
05.  
06.//倒序
07.  
08.var i = arr.length; while (i--) { } 
09.  
10.//遍历对象(不要用在数组上)
11.var val;
12.for(var key in obj){
13.     val = obj[key]
14.}

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP