【问题标题】:JavaScript typed arrays for all variables?所有变量的JavaScript类型数组?
【发布时间】:2019-06-08 02:12:58
【问题描述】:

我正在为一个研究项目编写一些代码。我用 javascript 编写它是因为我希望能够在任何地方运行它,并且能够在我完成项目时将它发布到网络上。但我还需要重新运行此代码数十万次,并将结果作为研究项目的一部分查看,因此我希望它高效。 对于项目的 webgl 部分,我使用的是数组缓冲区和类型化数组。

对所有 javascript 变量使用数组缓冲区或类型化数组是否会给普通 javascript 带来任何性能改进?


根据我的阅读,这听起来像是 Web 组装和一些转译器正在做的事情。

【问题讨论】:

  • 这毫无意义......你将如何使用 only ArrayBuffers 做任何事情?您会将它们的字节值设置为 ArrayBuffers 吗?是的,使用 ArrayBuffer 处理可以设置在固定长度内存区域中的类型数字比使用普通 Array 更快,但是如果你进行字符串操作,那么不,它不会比使用字符串更快。跨度>
  • 分析您的代码并找出瓶颈。

标签: javascript performance arraybuffer typed-arrays


【解决方案1】:

绝对有可能利用一些相同的类型数组技术来提升 web 组装。然而,从代码 sn-p 中可以看出,用类型化数组天真地替换 JS 标准数组不会以任何主要方式影响性能,例如 Chrome。 (事实上​​,在例子中观察到的效果是负面的)

let a = [];
let A = new Float64Array(1000000)
let b = [0, 0, 0, 0, 0, 0, 0, 0];
let B = new Float64Array(8);
for (let i = 0; i < 1000000; i++) {
  let v = Math.sqrt(1+i)
  a[i] = v;
  A[i] = v;
}


tn = performance.now()
for (let n = 0; n < 500; n++) {
  for (let i = 0; i < 999999; i++) {
    B[i % 8] = B[i % 8] + (A[i] * A[i])
  }
}
let SUM = 0;
for (let i = 0; i < 8; i++) {
  SUM = SUM + B[i];
}
console.log("   TYPED ARRAY", performance.now() - tn, SUM)


tn = performance.now()
for (let n = 0; n < 500; n++) {
  for (let i = 0; i < 999999; i++) {
    b[i % 8] = b[i % 8] + (a[i] * a[i])
  }
}
let sum = 0;
for (let i = 0; i < 8; i++) {
  sum = sum + b[i];
}
console.log("standard array", performance.now() - tn, sum)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2018-07-26
    • 2012-06-16
    • 2014-03-10
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多