JavaScript 所有变量的类型数组?
JavaScript typed arrays for all variables?
我正在为一个研究项目编写一些代码。我在 javascript 中编写它是因为我希望能够在任何地方 运行 它并且能够在我完成项目后将它发布到网络上。但我还需要重新 运行 这段代码数十万次,并将结果作为研究项目的一部分来查看,因此我希望它是高效的。
对于项目的 webgl 部分,我使用数组缓冲区和类型化数组。
对所有 javascript 变量使用数组缓冲区或类型化数组会给正常 javascript 任何性能改进吗?
从我读到的内容来看,这听起来像是 web assembly 和一些转译器正在做的事情。
绝对有可能利用一些相同的类型化数组技术来促进 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)
我正在为一个研究项目编写一些代码。我在 javascript 中编写它是因为我希望能够在任何地方 运行 它并且能够在我完成项目后将它发布到网络上。但我还需要重新 运行 这段代码数十万次,并将结果作为研究项目的一部分来查看,因此我希望它是高效的。 对于项目的 webgl 部分,我使用数组缓冲区和类型化数组。
对所有 javascript 变量使用数组缓冲区或类型化数组会给正常 javascript 任何性能改进吗?
从我读到的内容来看,这听起来像是 web assembly 和一些转译器正在做的事情。
绝对有可能利用一些相同的类型化数组技术来促进 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)