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
<script>function equal(a, b) {
if (a === b) return true;
if (a && b && typeof a == 'object' && typeof b == 'object') {
if (a.constructor !== b.constructor) return false;
var length, i, keys;
if (Array.isArray(a)) {
length = a.length;
if (length != b.length) return false;
for (i = length; i-- !== 0;)
if (!equal(a[i], b[i])) return false;
return true;
}
if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
keys = Object.keys(a);
length = keys.length;
if (length !== Object.keys(b).length) return false;
for (i = length; i-- !== 0;)
if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
for (i = length; i-- !== 0;) {
var key = keys[i];
if (!equal(a[key], b[key])) return false;
}
return true;
}
// true if both NaN, false otherwise
return a!==a && b!==b;
};
function valuesChanged(value, lastSyncedValue) {
return value.length !== lastSyncedValue.length ||
value.some((val, i) => val !== lastSyncedValue[i]);
}
// Helper to create test arrays
function makeArray(length, fillFn) {
const a = new Array(length);
for (let i = 0; i < length; i++) {
a[i] = fillFn(i);
}
return a;
}
var N = 1000000
var a_equal_1 = makeArray(N, function(i) { return i; });
var a_equal_2 = makeArray(N, function(i) { return i; }); // identical
var a_nonequal_1 = makeArray(N, function(i) { return i; });
var a_nonequal_2 = makeArray(N, function(i) { return (i === N - 1 ? -999999 : i); });
</script>
Ready to run.
| Test | Ops/sec | |
|---|---|---|
| fast-deep-equal (non-equal) | | ready |
| valuesChanged (non-equal) | | ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.