真相是什么?
时间:2011-03-18 来源:simayixin
试看如下代码如何优化?
<script> var span = function(fn){ var start = (new Date).getTime() ,end; fn(); end = (new Date).getTime(); return end - start; }; var t2 = span(function(){ var arr = [] ,arr1 = []; for(var i=0;i<100000;i++){ arr.push(i); } for(var i=0,l = arr.length;i<l;i++){ arr1.push(i); } }); alert(t2); </script> Test ok, 每个例子中我们都先构造一个拥有10w个元素的数组(已经很大了),然后我们用上下2中方式进行遍历。最后会alert出分别用了多少时间。 请大家分别尝试ie6,7,8,9 ,chrome,ff,opera等等各种浏览器。
var arr = [....];好吧,不止一次,我们都会在各种书籍博客中看到如下做法:
for(var i=0;i<arr.length;i++){ //pass }
var arr = [....];恩,缓存了length,一切看起来那么美好。然而实践总是检验真理的唯一标准,我们做2个测试,看看世界到底因此美好了多少。(如下请点击Test按钮) <script> var span = function(fn){ var start = (new Date).getTime() ,end; fn(); end = (new Date).getTime(); return end - start; }; var t = span(function(){ var arr = [] ,arr1 = []; for(var i=0;i<100000;i++){ arr.push(i); } for(var i=0;i<arr.length;i++){ arr1.push(i); } }); alert(t); </script> Test
for(var i=0,l=arr.length;i<l;i++){ //pass }
<script> var span = function(fn){ var start = (new Date).getTime() ,end; fn(); end = (new Date).getTime(); return end - start; }; var t2 = span(function(){ var arr = [] ,arr1 = []; for(var i=0;i<100000;i++){ arr.push(i); } for(var i=0,l = arr.length;i<l;i++){ arr1.push(i); } }); alert(t2); </script> Test ok, 每个例子中我们都先构造一个拥有10w个元素的数组(已经很大了),然后我们用上下2中方式进行遍历。最后会alert出分别用了多少时间。 请大家分别尝试ie6,7,8,9 ,chrome,ff,opera等等各种浏览器。
ok,测试完毕(假设您分别进行了测试),那么结论呢?即使是ie6这种被大家所诟病的浏览器所表现出来的差异也不过仅仅在10多ms, 请注意这是在10w个元素的情况下,其他牛叉浏览器就不多说了。
最后,程序的性能永远不会出在这种吹毛求疵的地方。
相关阅读 更多 +