【问题标题】:Typed array for storing objects in javascript用于在 javascript 中存储对象的类型化数组
【发布时间】:2013-08-19 15:10:30
【问题描述】:

我一直在 javascript 中使用像 Int32Array 这样的类型化数组。我想使用 javascript 实现一个循环队列,并且不想在性能上妥协。

问题是队列项是 Javascript Object 类型,因此我无法将它们保存在简单的 Array 对象中。因此,我需要一个类型化数组,它可以与 JS Object 类型对象一起执行得非常好。

问候。

更新: 从 cmets 看来,人们似乎并不清楚拥有类型化数组的性能优势,所以我创建了这个 js perf 测试以使其更加明显

http://jsperf.com/typed-array-vs-normal-array

【问题讨论】:

  • 认真的吗? JS 对象是普通数组存储最好的。
  • 如果我没记错的话,Array 是 JavaScript 中的一个对象。
  • new Array(window,document,String); 工作得很好——是什么让你认为对象不能进入数组——这是关于特定实现的吗?
  • @Tushar 您处理的哪些数据需要这种级别的优化?标准阵列通常非常快。如果您遇到严重的性能问题,我不得不质疑您是如何达到此要求的
  • 长话短说:没有这种类型的数组。

标签: javascript performance


【解决方案1】:

类型化数组用于有效地存储原始值。它们不是基于神奇地提高性能的机制。它很快,因为它知道存储值的类型和长度。 “对象”是 JavaScript 中的基本“类型”。这就像 go 中的 interface{}。您对“对象”了解不多,无法有效地存储它。因此,根据定义,对象的类型化数组不能存在。

【讨论】:

  • 可以的,只是优化没有完成。了解动态对象的固定布局是所有引擎为了竞争而必须做的事情。
  • 我同意你的观点,但我也认为普通数组变慢的主要原因是它使用 HASH 来查找元素。如果您只想遍历列表,HASHES 总是会影响性能
  • @Tushar 这是错误的,除非你对你的数组做一些非常时髦的事情,否则它将由普通的类似“C 数组”的构造支持。
  • @Esailija 你能解释一下为什么我在我的问题中分享的 jsperf 链接的性能存在如此大的差异吗?
  • 您需要一个数据协定才能使用 c 数组。缺少这种契约的对象将需要使用一种效率低得多的机制来使用“C 数组”。必须有浪费。看看:stackoverflow.com/a/7799543/300011。 JIT 编译器可以对代码进行静态分析以减少这些低效率,但我认为它永远不会那么高效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多