performance tests

test for different performance of large simple manipulation

by sjpt

HTML

<head></head>
<body>...</body>

CSS

body {color: white; background-color: black}

JavaScript

document.body.innerHTML = navigator.product + '<br>' + navigator.appVersion + '<hr>';
const times = {};
const o = (v) => document.body.innerHTML += v + '<br>';
const p = (k, m) => {
  const oldt = times[k];
  const newt = performance.now();
  if (oldt) o(k + ': ' + (newt - oldt) + '       ' + (m||''));
  times[k] = newt;
}

function gtest(n = 6284) { // 6284 taken from 3x yeast chromosome at 2k resolution
  p('total');

  const tt = new Float32Array(n * (n + 1) / 2); // triangle matrix

	function populate() {
  p('populate tt loop fun')
  for (let i = 0; i < tt.length; i++) tt[i] = i;
  p('populate tt loop fun')
  }
  populate()


  const td = new Float32Array(n * n); // square matrix data

	function t2sq() {
  p('triToSquare nested loop fun wider vars');
  let ip = 0; let i,j;
  for (i = 0; i < n; i++) {
    for (j = 0; j <= i; j++) {
      td[i + j * n] = td[j + i * n] = tt[ip++];
    }
  }
  p('triToSquare nested loop fun wider vars');
  }
  t2sq();

	function t2sql() {
  p('triToSquare nested loop fun loop vars');
  let ip = 0;
  for (let i = 0; i < n; i++) {
    for (let j = 0; j <= i; j++) {
      td[i + j * n] = td[j + i * n] = tt[ip++];
    }
  }
  p('triToSquare nested loop fun loop vars');
  }
  t2sql();


  function stats() {
  let  xsumv = 0, xsumv2 = 0, xnonz = 0, xsetz = 0, xminv = 9999999999999, xmaxv = 0;
  p('stats loop fun');
  for (let i = 0; i < tt.length; i++) {
    const v = tt[i];
    xsumv += v;
    xsumv2 += v * v;
    if (v === 0) {
      xsetz++
    } else {
      xnonz++;
      if (v < xminv) xminv = v;  // improves Firefox from 16 to 14
      if (v > xmaxv) xmaxv = v;
    }
  }
  p('stats loop fun', tt.length);
  }
  stats();

  function statsex() {
  let  xsumv = 0, xsumv2 = 0, xnonz = 0, xsetz = 0, xminv = 9999999999999, xmaxv = 0;
  p('stats loop fun ex vars');
  let v;
  for (let i = 0; i < tt.length; i++) {
    v = tt[i];
    xsumv += v;
    xsumv2 += v * v;
    if (v === 0) {
      xsetz++
    } else {
      xnonz++;
      if (v...