jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
Compares speed of variations of the for, for-in, while, do-while, and Array.forEach looping constructs.
Changes since revision 22
: Fixed the "Reverse do … while
loop" test so it doesn't make the arr array larger for later tests.
: Normalized operation complexity to arr[i] *= 1 for all tests so later iteration of tests aren't doing calculations with larger values (i.e. 1998 * 5 => 9,990 * 5 => 49,950).
: Fixed the "for .. in (will skip empty values)" test so it only uses arr's elements and excludes standard and injected Array members.
: Fixed the Preparation code so it doesn't leak its local "k" loop counter variable into the global scope.
<script>
var arr = [];
(function populateWithoutPollutingGlobalScope () {
var k = 2000;
while (k--) { arr[k]=k; }
})();
// Intentionally pollute all objects for the for-in test(s):
Object.prototype [Number.MIN_VALUE] = "Externally polluted.";
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
while loop that imitates a for loop |
| ready |
while loop that imitates a for loop, caching the length |
| ready |
Reverse while loop |
| ready |
Reverse while loop without implicit ToBoolean |
| ready |
Reverse do … while loop |
| ready |
Reverse for loop |
| ready |
Old ’n’ busted for loop |
| ready |
Old ’n’ busted for loop, caching the length |
| ready |
Cool guy loop |
| ready |
Cool guy loop, caching the length |
| ready |
Native Array#forEach implementation |
| ready |
Native Array#forEach implementation with named function |
| ready |
for .. in (will skip empty values) |
| ready |
i++ |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.