Типизированные JavaScript массивы для всех переменных? - PullRequest
0 голосов
/ 14 января 2019

Я пишу код для исследовательского проекта. Я пишу это в javascript, потому что я хочу иметь возможность запускать его где угодно и иметь возможность публиковать его в Интернете, когда я закончу проект. Но мне также нужно перезапускать этот код сотни тысяч раз и рассматривать результаты как часть исследовательского проекта, поэтому я хочу, чтобы он был эффективным. Для части проекта, использующей webgl, я использую буфер массива и типизированные массивы.

Может ли использование буфера массива или типизированного массива для всех переменных javascript дать обычному javascript улучшение производительности?


Из того, что я прочитал, звучит так, как будто это то, чем занимаются веб-сборки и некоторые транспилеры.

1 Ответ

0 голосов
/ 16 января 2019

Определенно можно воспользоваться некоторыми из тех же методов типизированных массивов, которые дают веб-сборке свой импульс. Однако, как видно из фрагмента кода, наивная замена стандартного массива 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)
...