Last active
September 8, 2024 15:58
-
-
Save alexkuz/972d4e8b9e22a51948c35f29d8e5ceec to your computer and use it in GitHub Desktop.
Array performance quiz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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