【问题标题】:How to improve the memory efficiency of typescript/javascript array?如何提高 typescript/javascript 数组的内存效率?
【发布时间】:2021-05-10 04:33:34
【问题描述】:
const ret1 = [];
const ret2 = [];

for (const points of pointsList) {
    ret1.push({ x: points.right.x, y: points.right.y});
    ret2.unshift({ x: points.left.x, y: points.left.y});
}

push好像不是内存效率,有什么办法提高吗?

更新:

我认为改进它不是从推送而是使用float32array,有什么建议吗?

【问题讨论】:

  • 是什么让你觉得效率低下?
  • 内存效率不高怎么办?你在这里分配了一堆对象。您的意思是给现有对象起别名吗?您的意思是预先分配数组吗? push 确实在数组中分配空间,但这就是将对象放入数组时发生的情况。无关主题:我可以说ret2.unshift 很慢,因为它在这样的循环中是 O(n^2)。请改用push,最后使用reverse()
  • @ggorlen 预分配数组是否会让这变得更好?
  • 我很抱歉,但我基本上不知道你想要完成什么,问题到底是什么等等,所以很难/不可能提供很多东西建议。请澄清。

标签: javascript typescript memory push memory-efficient


【解决方案1】:
const ret1 = pointsList.map(({right: {x,y}}) => ({x,y}));
const ret2 = pointsList.reverse().map(({left: {x,y}}) => ({x,y}));

【讨论】:

  • 这是一个很好且清晰的解决方案,绝对是一个改进,虽然它对我来说有点太花哨了:它需要深入了解 JavaScript 才能解析它。但是,乍一看意图很明显,所以对我来说还可以。但是:为什么你认为它更节省内存?我怀疑是这样,所以我期待你的解释。这是一个诚实而好奇的问题:说服我!
  • 也可以添加解释。如果这样做,社区会更积极地收到答案。
猜你喜欢
  • 2011-02-21
  • 2019-07-26
  • 1970-01-01
  • 2012-09-22
  • 2014-05-04
  • 2012-01-11
  • 1970-01-01
  • 2015-11-08
  • 2019-05-01
相关资源
最近更新 更多