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 |
You can edit these tests or add more tests to this page by appending /edit to the URL.