forEach和map遍历大数据,到底谁更快?实践出真知

2024-08-28 04:28

本文主要是介绍forEach和map遍历大数据,到底谁更快?实践出真知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。

针对大量数据进行遍历时,forEach和map相比,谁的的性能更高,执行的更快?你觉得呢?先百度一下

image.png

但是,今天我没选择相信搜索结果,我决定测试一下。我不仅仅测试了forEach和map,还带上了for,结果出乎意料!

我创建一个包含一亿个元素的数组,对三个方法分别执行相同的求和操作:

forEach

const largeArray = Array.from({ length: 100000000 }, (_, index) => index);let total = 0;
console.time("forEach");
largeArray.forEach((item) => {total += item;
});
console.timeEnd("forEach");

map

const largeArray = Array.from({ length: 100000000 }, (_, index) => index);let total = 0;
console.time("map");
largeArray.map((item) => {total += item;
});
console.timeEnd("map");

for

const largeArray = Array.from({ length: 100000000 }, (_, index) => index);let total = 0;
console.time("for");
for (let i = 0; i < largeArray.length; i++) {total += largeArray[i];
}
console.timeEnd("for");

在浏览器中,将三个方法分别运行5次操作,单位ms,最后一行为均值,结果如下:

image.png
从结果看,如果用时长排序性能,性能从高到低应该依次是 for > forEach > map。1个亿的数据,好像有点太多了,那就再看看其他量级的比较。

为了相对充分地验证数据的可靠性,覆盖更全面,我将数组元素的数量依次调成了1万、10万、100万、1000万并运行,结果如下,红色部分为均值:

image.png
从上图中可以得出以下结论:

  1. 无论在哪个量级,forEach的性能高于map。
  2. 在10万级别数据以下,for的性能一般,通常低于另外两个。
  3. 数据量越大,达到百万级以上时,for的性能最高,其次是forEach,最后是map。

古人云,实践出真知,说的真不错。网上说的未必都是对的,有方法的还是可以测试下。我测试的数据量少,数组元素及操作也简单,所以结论未必完全正确。有实际超大数据处理经验的同学可以发表下意见。还有感兴趣的同学可以自己多试试,看看我们的结论是否一致,期待你的评论!

好了,分享结束,谢谢点赞,下期再见

这篇关于forEach和map遍历大数据,到底谁更快?实践出真知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113721

相关文章

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核