美文网首页
数组方法的性能损失

数组方法的性能损失

作者: alue | 来源:发表于2024-09-13 08:22 被阅读0次

js 为数组提供了许多函数式方法,用起来很优雅直观,但实际上是有性能损失的。

例如有这样一个浮点数组:

const numbers = Array.from({ length: 10_000 }).map(() => Math.random())

我们分别用函数式和命令式做同相同的操作。

函数式:

// 1. functional
const result =
  numbers
    .map(n => Math.round(n * 10))
    .filter(n => n % 2 === 0)
    .reduce((a, n) => a + n, 0)

命令式

// 2. imperative
let result = 0
for (let i = 0; i < numbers.length; i++) {
  let n = Math.round(numbers[i] * 10)
  if (n % 2 !== 0) continue
  result = result + n
}

执行效率比对如下:

原因是函数式实现中,调用了3次数组方法,每一次都需要遍历N个元素,而命令式只需要遍历一次。同时,数组方法还涉及到数组拷贝,这些拷贝后的数据后面还需要垃圾回收。

对象方法,例如 Object.values(), Object.keys()Object.entries() 也有类似问题。

相关文章

  • 2018-01-19

    关于数组的性能 Javascript 批量创建数组的方法,为了衡量它们的性能,我分别使用不同的方法创建一个长度为 ...

  • 数组,循环语句,定时器,闭包

    创建数组 面向对象的方式创建 直接创建(推荐使用,性能更高) 获取数组的成员数量(长度) 数组常用方法 1、获取数...

  • 数组的遍历一:遍历次数的对比

    数组遍历 前言 数组的遍历方法有很多, 哪一种比较好呢?不同的遍历方法之间性能有差异吗?哪些方法可以提前退出遍历呢...

  • iOS NSArray NSDictionary 防止崩溃方案

    数组 字典 注:因为该方法是利用runtime进行方法交换,所以会导致部分性能降低,所以对于有性能要求的请慎用此方...

  • 关于黑苹果系统显卡性能损失的问题

    关于显卡性能损失 目前爬文结果表示,Ryzen 配上Nvidia 的显卡,性能损失约50%,配上AMD 的显卡,大...

  • js数组遍历

    for循环 对于基础写法的性能可以进行优化,这种基本的数组遍历方法中,数组的长度应该只需要查询一次而非每次循环都要...

  • JS中的冒泡排序和性能对比

    本文对比了冒泡排序和sort方法的性能; 1、最直观的冒泡排序: 在处理一个随机生成的数组时(数组内有1272个数...

  • reduce实现多个实用的数组方法

    使用reduce实现数组自身的以及其他实用的方法。此处不考虑性能,仅仅通过reduce去实现一些方法以体现redu...

  • 数组基础

    数组基础 新建数组 数组方法和属性 数组常用方法 数组的遍历方法

  • 剔除数组中重复元素

    关于iOS去除数组中重复数据的几种方法 摘要其一: NSSet 功能和性能上挺强大的,但是相对于数组,其是无序的集...

网友评论

      本文标题:数组方法的性能损失

      本文链接:https://www.haomeiwen.com/subject/ifcvljtx.html