有人测试了 JS 中所有循环的速度!来看看JS 中最快的循环是什么?

昨天看到有一位国外的大佬测试了 JS 中所有 【循环操作】 的性能消耗和执行速度。涉及到的 API 包含:for 循环、while 循环、ForEach、Map、Filter 等在内的 十余种 API。

昨天看到有一位国外的大佬测试了 JS 中所有 【循环操作】 的性能消耗和执行速度。

涉及到的 API 包含:for 循环、while 循环、ForEach、Map、Filter 等在内的 十余种 API。

但是需要注意:以下测试内容【仅供参考】。因为实际的开发中,涉及到的场景要复杂的多,不能通过这种简单的测试一概而论!

让我们来看一看吧!

涉及到的 API 一览:For 循环、While 循环、Do-While 循环、For-Of、forEach、map、filter、reduce、some、every、find 

测试方案

在测试中,将使用 console.time() 和 console.timeEnd() 方法来测量 API 的执行时间。伪代码如下:

console.time ('描述信息') 
// 要测量的代码
console.timeEnd ('描述信息')

    测试任务是:将 5000 万个数据从一个数组转移到另一个数组。 通过执行时间,来判断性能。

    其中每个执行都将 异步 进行,以保证互不干扰。

    执行代码

    // 生成随机数据
    const numbersList = Array.from({ length: 50_000_000 }, () =>
      Math.floor(Math.random() * 100)
    )
    
    // For 循环
    const usingForLoop = async (array) => {
      console.time('For 循环')
    
      const newNumbersList = []
      for (let i = 0; i < array.length; i++) {
        newNumbersList.push(array[i])
      }
    
      console.timeEnd('For 循环')
    }
    
    // While 循环
    const usingWhile = async (array) => {
      console.time('WHILE')
    
      let i = 0
      const newNumbersList = []
      while (i < array.length) {
        newNumbersList.push(array[i])
        i++
      }
    
      console.timeEnd('WHILE')
    }
    
    // Do-While 循环
    const usingDoWhile = async (array) => {
      console.time('DO WHILE')
    
      let i = 0
      const newNumbersList = []
      do {
        newNumbersList.push(array[i])
        i++
      } while (i < array.length)
    
      console.timeEnd('DO WHILE')
    }
    
    // For-Of 循环
    const usingForOf = async (array) => {
      console.time('FOR OF')
    
      const newNumbersList = []
      for (const item of array) {
        newNumbersList.push(item)
      }
    
      console.timeEnd('FOR OF')
    }
    
    // ForEach 循环
    const usingForEach = async (array) => {
      console.time('forEach')
    
      const newNumbersList = []
      array.forEach((item) => newNumbersList.push(item))
    
      console.timeEnd('forEach')
    }
    
    // Map 循环
    const usingMap = async (array) => {
      console.time('map')
    
      const newNumbersList = array.map((number) => number)
    
      console.timeEnd('map')
    }
    
    // Filter 循环
    const usingFilter = async (array) => {
      console.time('filter')
    
      const newNumbersList = array.filter((item) => true)
    
      console.timeEnd('filter')
    }
    
    // Reduce 循环
    const usingReduce = async (array) => {
      console.time('reduce')
    
      const newNumbersList = array.reduce((acc, item) => {
        acc.push(item)
        return acc
      }, [])
    
      console.timeEnd('reduce')
    }
    
    // Some 循环
    const usingSome = async (array) => {
      console.time('some')
    
      const newNumbersList = []
      array.some((item) => {
        newNumbersList.push(item)
        return false
      })
    
      console.timeEnd('some')
    }
    
    // Every 循环
    const usingEvery = async (array) => {
      console.time('every')
    
      const newNumbersList = []
      array.every((item) => {
        newNumbersList.push(item)
        return true
      })
    
      console.timeEnd('every')
    }
    
    // Find 循环
    const usingFind = async (array) => {
      console.time('find')
    
      const newNumbersList = []
      array.find((item) => {
        newNumbersList.push(item)
        return false
      })
    
      console.timeEnd('find')
    }
    
    // 执行循环操作
    ;(async () => {
      await usingForLoop(numbersList)
      await usingWhile(numbersList)
      await usingDoWhile(numbersList)
      await usingForOf(numbersList)
      await usingForEach(numbersList)
      await usingMap(numbersList)
      await usingFilter(numbersList)
      await usingReduce(numbersList)
      await usingSome(numbersList)
      await usingEvery(numbersList)
      await usingFind(numbersList)
    })()

    打印结果如下:

    图片

    【在当前测试场景下】,根据测试结果所示,可发现:

    • 原生的 For 循环依然是最快的循环方式
    • forEach 的耗时是 for 循环的 3 倍
    • For...Of 这种简化的语法,性能耗时较高,是 for 循环的 4 倍,不如 forEach
    • forEach 的循环执行速度,竟然 不如 map

    AI大模型学习福利

    作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

    一、全套AGI大模型学习路线

    AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

    因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

    二、640套AI大模型报告合集

    这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

    因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

    三、AI大模型经典PDF籍

    随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


    因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

    四、AI大模型商业化落地方案

    因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

    作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值