gpt4 book ai didi

javascript - native 映射、过滤器等方法是否已优化以在可能的情况下在单个中间数组上运行?

转载 作者:数据小太阳 更新时间:2023-10-29 04:52:14 24 4
gpt4 key购买 nike

考虑下面的代码片段,它将一个对象数组转换为一个数字数组,过滤掉负值,然后乘以 2:

var objects = (new Array(400)).fill({
value: Math.random() * 10 - 5
});

var positiveObjectValuesDoubled = objects.map(
item => item.value
).filter(
value => value > 0
).map(
value => value * 2
);

当像这样链接在一起时,总共创建了多少个实际的 Array 对象? 1 还是 3? (不包括初始 objects 数组)

特别是,我在谈论由 filter 创建的中间 Array 对象,然后由链中的第二个 map 调用:考虑到这些数组对象不是本身明确引用,Javascript 运行时是否足够智能以在这种情况下尽可能优化以使用相同的内存区域?

如果这不能用明确的是或否来回答,我如何在各种浏览器中确定这一点? (据我所知,the array constructor can no longer be overridden,所以这不是一个选项)

最佳答案

目前的评论很好,这里是一个总结答案:引擎可能会针对链式方法调用的内存使用进行优化,但您永远不应指望引擎会为您进行优化。

在评估您的链式方法示例时,引擎的内存堆以相同的顺序受到影响,step by step (MDN documentation on the event loop) .但是,这是如何工作的取决于引擎......对于某些 Array.map() 可能会创建一个新数组并在下一条消息执行之前垃圾收集旧数组,它可能会离开旧数组徘徊直到再次需要空间,它可能会改变一个阵列,无论如何。理解这一点的难度非常大。

你能测试一下吗?有时! jQuery or javascript to find memory usage of page , this Google documentation是很好的起点。或者您可以使用类似 http://jsperf.com/ 的方式查看速度这至少可以让您了解某些东西可能占用的空间有多大。但您也可以利用这段时间对自己的代码进行直接优化。可能是更好的选择。

关于javascript - native 映射、过滤器等方法是否已优化以在可能的情况下在单个中间数组上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com