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
class EmitterForEach {
listeners = [];
emit(evt) {
this.listeners.forEach(fn => {
fn(evt);
});
}
}
class EmitterForVar {
listeners = [];
emit(evt) {
for (var i = 0, l = this.listeners.length; i < l; i++) {
this.listeners[i](evt);
}
}
}
class EmitterForLet {
listeners = [];
emit(evt) {
for (let i = 0, l = this.listeners.length; i < l; i++) {
this.listeners[i](evt);
}
}
}
function make1handler() {
var handler1_counter = 0
function handler1(evt) { handler1_counter++; }
return handler1;
}
function make2handlers() {
var handler1_counter = 0
function handler1(evt) { handler1_counter++; }
var handler2_counter = 0
var handler2 = (evt) => { handler2_counter++; }
return [handler1, handler2];
}
function make20handlers() {
var handler1_counter = 0
function handler1(evt) { handler1_counter++; }
var handler2_counter = 0
function handler2(evt) { handler2_counter = evt.q; }
var handler3_counter = 0
function handler3(evt) { handler3_counter = evt.w; }
var handler4_counter = 0
function handler4(evt) { handler4_counter = evt.w + evt.q; }
var block = [handler1, handler2, handler3, handler4];
return [].concat(block).concat(block).concat(block).concat(block).concat(block);
}
function emit100times(emitter) {
for (var i = 0; i < 100; i++) {
var evt = { q: i, w: Math.random(), e: Math.random() };
emitter.emit(evt);
}
}
var emitterForEach_1 = new EmitterForEach();
var emitterForVar_1 = new EmitterForVar();
var emitterForLet_1 = new EmitterForLet();
var e1 = [emitterForEach_1, emitterForVar_1, emitterForLet_1];
var h1 = make1handler();
e1.forEach(e => e.listeners.push(h1));
var emitterForEach_2 = new EmitterForEach();
var emitterForVar_2 = new EmitterForVar();
var emitterForLet_2 = new EmitterForLet();
var e2 = [emitterForEach_2, emitterForVar_2, emitterForLet_2];
var h2 = make2handlers();
e2.forEach(e => h2.forEach(h => e.listeners.push(h)));
var emitterForEach_3 = new EmitterForEach();
var emitterForVar_3 = new EmitterForVar();
var emitterForLet_3 = new EmitterForLet();
var e3 = [emitterForEach_3, emitterForVar_3, emitterForLet_3];
var h3 = make20handlers();
e3.forEach(e => h3.forEach(h => e.listeners.push(h)));
emit100times(emitterForEach_1);
emit100times(emitterForVar_1);
emit100times(emitterForLet_1);
emit100times(emitterForEach_2);
emit100times(emitterForVar_2);
emit100times(emitterForLet_2);
emit100times(emitterForEach_3);
emit100times(emitterForVar_3);
emit100times(emitterForLet_3);
Ready to run.
Test | Ops/sec | |
---|---|---|
emitterForEach_1 |
| ready |
emitterForVar_1 |
| ready |
emitterForLet_1 |
| ready |
emitterForEach_2 |
| ready |
emitterForVar_2 |
| ready |
emitterForLet_2 |
| ready |
emitterForEach_3 |
| ready |
emitterForVar_3 |
| ready |
emitterForLet_3 |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.