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
Which is faster for single wildcard-based ABP filters?
function FilterRegex(s, tokenBeg) {
this.s = s;
this.tokenBeg = tokenBeg;
this.re = new RegExp('^' + s.replace(/([.+?^=!:${}()|\[\]\/\\])/g, '\\$1').replace(/\*/g, '.*'));
}
FilterRegex.prototype.match = function(s, tokenBeg) {
return this.re.test(s.slice(tokenBeg - this.tokenBeg));
};
function FilterIndexOf(s, tokenBeg) {
this.s = s;
this.tokenBeg = tokenBeg;
var wcOffset = s.indexOf('*');
this.lSegment = s.slice(0, wcOffset);
this.rSegment = s.slice(wcOffset + 1);
}
FilterIndexOf.prototype.match = function(s, tokenBeg) {
tokenBeg -= this.tokenBeg;
return s.indexOf(this.lSegment, tokenBeg) === tokenBeg &&
s.indexOf(this.rSegment, tokenBeg + this.lSegment.length) > 0;
};
function FilterSubstr(s, tokenBeg) {
this.s = s;
this.next = undefined;
this.tokenBeg = tokenBeg;
var wcOffset = s.indexOf('*');
this.lSegment = s.slice(0, wcOffset);
this.rSegment = s.slice(wcOffset + 1);
}
FilterSubstr.prototype.match = function(s, tokenBeg) {
tokenBeg -= this.tokenBeg;
return s.substr(tokenBeg, this.lSegment.length) === this.lSegment &&
s.indexOf(this.rSegment, tokenBeg + this.lSegment.length) > 0;
};
// "http://m.bestofmedia.com/s/52896/commun/css/new/default.static.header.less.tha.min.css"
var frem1 = new FilterRegex("static.hd-trailers.net/js/javascript_*.js|", 0);
var fiom1 = new FilterIndexOf("static.hd-trailers.net/js/javascript_*.js|", 0);
var fssm1 = new FilterSubstr("static.hd-trailers.net/js/javascript_*.js|", 0);
// "http://cdn.echoenabled.com/clientapps/v2/backplane.js"
var frem2 = new FilterRegex("cdn.epom.com*/940_250.gif", 0);
var fiom2 = new FilterIndexOf("cdn.epom.com*/940_250.gif", 0);
var fssm2 = new FilterSubstr("cdn.epom.com*/940_250.gif", 0);
// "https://apis.google.com/js/plusone.js"
var frem3 = new FilterRegex("google.com/images/*_promo_", 0);
var fiom3 = new FilterIndexOf("google.com/images/*_promo_", 0);
var fssm3 = new FilterSubstr("google.com/images/*_promo_", 0);
// "http://www.wired.com/css/global.css?v=20121120a"
var frem4 = new FilterRegex("wired.com/images/xrail/*/samsung_layar", 0);
var fiom4 = new FilterIndexOf("wired.com/images/xrail/*/samsung_layar", 0);
var fssm4 = new FilterSubstr("wired.com/images/xrail/*/samsung_layar", 0);
// "http://s0.wp.com/_static/??-eJx9js0OwiAQhF9Iuq1tiB6Mz0JhA7T8BbZtfHsJJxO1t5nNtzMDR2IyBsJA4DeW3KZtKODsigUWpCTkyprrZCkX+I37xOvZJ0FNmvr0zZNBX0N3m4BQGpm3IA279sMIhV4OO2/DWUnG2UVdpYZKfdh/TWYC7eIs3FnqYZVGKi1Sx6gyCtW2P/1jGO9Tz6cb58sbzNNsjw=="
var frem5 = new FilterRegex("wp.com/wp-content/themes/vip/tctechcrunch/images/tc_*_skin.jpg", 0);
var fiom5 = new FilterIndexOf("wp.com/wp-content/themes/vip/tctechcrunch/images/tc_*_skin.jpg", 0);
var fssm5 = new FilterSubstr("wp.com/wp-content/themes/vip/tctechcrunch/images/tc_*_skin.jpg", 0);
Ready to run.
Test | Ops/sec | |
---|---|---|
RegExp miss |
| ready |
indexOf miss |
| ready |
substr miss |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.