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...