资讯专栏INFORMATION COLUMN

js--遍历数组和对象方法及其效率--for-forof--foreach--forin

ThinkSNS / 2590人阅读

摘要:数组优化版优化版谷歌版本正式版本位优化版火狐版本优化版结论这是一个尴尬的结论,谷歌火狐,同样是最新版本或许谷歌才是王道,火狐跳舞吧,颤抖吧,你也太慢了吧,以谷歌为准相对来说作为新的遍历方法具有可观的效率对象

数组
    var arr = new Array(10000000);
    var arr1 = [];
    var arr2 = [];
    var arr3 = [];
    var arr4 = [];
    var arr5 = [];
    var arr6 = [];
 
    arr.fill(1);
 
    console.time("for优化版");
    for(var i = 0,len = arr.length;i < len;i ++){
        arr1.push(arr[i]);
    }
    console.timeEnd("for优化版");
 
    //for
    console.time("for");
    for(var i = 0;i < arr.length;i ++){
        arr2.push(arr[i]);
    }
    console.timeEnd("for");
 
    //forEach
    console.time("forEach");
    arr.forEach(function(val){
        arr3.push(val);
    });
    console.timeEnd("forEach");
 
    //for in
    console.time("for in");
    for(var b in arr){
        arr4.push(arr[b]);
    }
    console.timeEnd("for in");
 
    //map
    console.time("map");
    arr.map(function(val){
        arr5.push(val);
    });
    console.timeEnd("map");
 
    //for of
    console.time("for of");
    for(var d of arr){
        arr6.push(arr[d]);
    }
    console.timeEnd("for of");
谷歌 版本 70.0.3538.110(正式版本) (64 位):
for优化版: 221.882080078125ms
for     : 1106.947998046875ms
forEach : 366.0771484375ms
forin   : 3758.628173828125ms
map     : 2020.76416015625ms
forof   : 1721.920166015625ms
 火狐 版本 63.03 :
for优化版: 9959ms
for      : 10192ms 
forEach  : 1286ms
forin    : 9261ms
map      : 1776ms
forof    : 6659ms

结论

   这是一个尴尬的结论,谷歌vs火狐,同样是最新版本 或许谷歌才是王道,火狐跳舞吧,颤抖吧,你也太慢了吧, 以谷歌为准相对来说forof作为新的ES6遍历方法具有可观的效率
对象
        var obj = {};
    for(var i = 0,j = 10000000;i < j;i ++){
        obj[i] = i;
    }
    console.log(obj);
    var obj1 = {};
    var obj2 = {};
    var obj3 = {};
    var obj4 = {};
    var obj5 = {};
    var obj6 = {};
    console.time("foreach");
    Object.keys(obj).forEach(function(key){
//             obj1[key] = obj[key];
    });
    console.timeEnd("foreach");
    console.time("forin");
    for(var key in obj) {
//             obj2[key] = obj[key];
    }
    console.timeEnd("forin");
    console.time("getOwnPropertyNames");
    Object.getOwnPropertyNames(obj).forEach(function(key){
//             obj3[key] = obj[key];
    });
    console.timeEnd("getOwnPropertyNames");
    console.time("Reflect");
    Reflect.ownKeys(obj).forEach(function(key){
//             obj4[key] = obj[key];
    });        
    console.timeEnd("Reflect");
    console.log("---------------------------------------------------")
    console.time("forofentry");
    for (let [key, value] of Object.entries(obj)) {
//             obj5[key] =  value;
    }
    console.timeEnd("forofentry");
    console.time("forofkey");
    for (let key of Object.keys(obj)) {
//             obj6[key] =  obj[key];
    }
    console.timeEnd("forofkey");
--------------------- 
谷歌 版本 70.0.3538.110(正式版本) (64 位):
foreach            : 3097.0302734375ms
forin              : 2746.07666015625ms
getOwnPropertyNames: 7264.22412109375ms
Reflect            : 7151.320068359375ms
       ----------------------------------
forofentry         : 16713.181884765625ms
forofkey           : 5213.873046875ms
火狐 版本 63.03 :
foreach            : 727ms
forin              : 3409ms 
getOwnPropertyNames: 775ms
Reflect            : 749ms
       ----------------------------------
forofentry         : 6950ms
forofkey           : 1274ms

结论

   这是一个尴尬的结论,谷歌vs火狐,同样是最新版本 有点尴尬, 以谷歌为准相对来说forin具有可观的效率

结论

   遍历数组有优化版的for循环,遍历对象用forin

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99734.html

相关文章

  • 第十一章 持有对象

    摘要:允许从任一方向来遍历对象,并在遍历迭代过程中进行修改该对象,还能获得迭代器的当前位置。这个构造函数是将返回了一个对象给,这也是的存储实现原理。 一、容器产生的原因   1.数组的缺点:大小一旦给定就无法更改,除非复制到一个新的数组中,开销大;而容器类都可以自动地调整自己的尺寸。  2.容器功能的多样性:容器可以实现各种不同要求,如按不同依据将元素进行排序或者保证容器内无重复元素等等。关...

    archieyang 评论0 收藏0
  • 前端面试题总结

    摘要:工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。异步编程的考察,其关键字的使用,与的关系,同时可以深入考察总共有几种异步编程的方式。 工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。适用于应届生和工作年限两年下的同学,掌握下面的知识基本满足工作需求了。...

    wuyangnju 评论0 收藏0
  • 前端面试题总结

    摘要:工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。异步编程的考察,其关键字的使用,与的关系,同时可以深入考察总共有几种异步编程的方式。 工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。适用于应届生和工作年限两年下的同学,掌握下面的知识基本满足工作需求了。...

    yangrd 评论0 收藏0
  • [ JS 进阶 ] 如何改进代码性能 (3)

    摘要:这样就改进了代码的性能,看代码将保存在局部变量中所以啊,我们在开发中,如果在函数中会经常用到全局变量,把它保存在局部变量中避免使用语句用语句延长了作用域,查找变量同样费时间,这个我们一般不会用到,所以不展开了。 本来在那片编写可维护性代码文章后就要总结这篇代码性能文章的,耽搁了几天,本来也是决定每天都要更新一篇文章的,因为以前欠下太多东西没总结,学过的东西没去总结真的很快就忘记了...

    young.li 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<