首页 > 解决方案 > 所有变量的JavaScript类型数组?

问题描述

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

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


从我读过的内容来看,这听起来像是 Web 组装和一些转译器正在做的事情。

标签: javascriptperformancearraybuffertyped-arrays

解决方案


绝对有可能利用一些相同类型的数组技术来推动 web 组装。然而,从代码片段中可以看出,天真地用类型化数组替换 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)


推荐阅读