Skip to content

Instantly share code, notes, and snippets.

@alexkuz
Last active September 8, 2024 15:58
Show Gist options
  • Save alexkuz/972d4e8b9e22a51948c35f29d8e5ceec to your computer and use it in GitHub Desktop.
Save alexkuz/972d4e8b9e22a51948c35f29d8e5ceec to your computer and use it in GitHub Desktop.
Array performance quiz
// Which iteration in the fastest?
// each number is in range [0 .. 255]
import { bench, run } from 'mitata';
var arr1 = []; // array of { rand: number } objects
var arr2 = []; // array of numbers
var arr3 = []; // array of numbers, iterated with forEach
var arr4 = []; // array of numbers packed into 4-byte integers
var arr5; // Uint8Array
var arr6 = []; // array of numbers, iterated with for .. of
var MAX_LEN = 20000000;
for (var i = 0; i < MAX_LEN; i++) {
var rand = Math.floor(Math.random() * 256);
arr1.push({ rand });
arr2.push(rand);
arr3.push(rand);
arr6.push(rand);
if (i % 4 === 3) {
arr4.push(arr2[i-3] << 24 | arr2[i-2] << 16 | arr2[i-1] << 8 | arr2[i]);
}
}
arr5 = new Uint8Array(arr2);
var sum, len;
// Benchmark starts here
bench('1. array of { rand: number } objects', () => {
sum = 0;
for (var i = 0; i < MAX_LEN; i++) {
sum += arr1[i].rand;
}
});
bench('2. array of numbers', () => {
sum = 0;
for (var i = 0; i < MAX_LEN; i++) {
sum += arr2[i];
}
});
bench('3. array of numbers, iterated with forEach', () => {
sum = 0;
arr2.forEach(function (val) {
sum += val;
});
});
bench('4. array of numbers packed into 4-byte integers', () => {
sum = 0;
len = arr4.length;
for (var i = 0; i < MAX_LEN; i++) {
if (i >= len) continue; // keeping the same amount of iterations, just for fun
sum += (arr4[i] >>> 24) + ((arr4[i] >>> 16) & 0xff) + ((arr4[i] >>> 8) & 0xff) + (arr4[i] & 0xff);
}
});
bench('5. Uint8Array', () => {
sum = 0;
len = arr5.length;
for (var i = 0; i < len; i++) {
sum += arr5[i];
}
});
bench('6. array of numbers, iterated with for .. of', () => {
sum = 0;
len = arr6.length;
for (var val of arr6) {
sum += val;
}
});
await run({});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment