(评论)
(comments)
原始链接: https://news.ycombinator.com/item?id=43688460
Hacker News 上的一个帖子讨论了一篇关于 2025 年 JavaScript 核心功能的博客文章。评论者 bhaney 对作者关于迭代器辅助函数的性能说法提出了质疑,他发现 `arr.values().drop().take().filter().map().toArray()` 比传统的 `arr.slice().filter().map()` 慢得多,而且内存分配也差不多。
Gnabgib 进一步解释说,迭代器辅助函数会多次分配内存(.values 和 .toArray),降低了效率。他们还批评了使用数组交换技巧来提高性能的建议。
Golergka 认为,大多数 JS/TS 代码优先考虑可读性而不是性能,但是关键的性能部分需要不同的编码风格。
Gnabgib 回复说,他们不同意新方法更易读,并继续指出 C# Linq 的性能损失几乎可以忽略不计,因为 C# 引擎进行了优化。但 JavaScript 还达不到这个水平,多个 JavaScript 引擎都需要赶上来。此外,迭代器辅助函数链中的单个函数无法预测后续步骤以提高效率,而优秀的软件工程师可以做到这一点。
I quickly benchmarked the two code snippets:
and but scaled up to much larger arrays. On V8, both allocated almost exactly the same amount of memory, but the latter snippet took 3-4x as long to run.reply