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 src="https://cdnjs.cloudflare.com/ajax/libs/jade/1.10.0/jade.min.js"></script>
<script>
var locals = {
things: [
{ a: 'blah', b: 'halb' }
, { a: 'clah', b: 'halc' }
, { a: 'clah', b: 'halc' }
, { a: 'blah', b: 'halb' }
, { a: 'clah', b: 'halc' }
, { a: 'clah', b: 'halc' }
, { a: 'clah', b: 'halc' }
, { a: 'blah', b: 'halb' }
, { a: 'blah', b: 'halb' }
, { a: 'clah', b: 'halc' }
, { a: 'blah', b: 'halb' }
]
}
var _ENCODE_HTML_RULES = {
'&': '&'
, '<': '<'
, '>': '>'
, '"': '"'
, "'": '''
}
, _MATCH_HTML = /[&<>\'"]/g;
function betterEscape(html){
var result = String(html).replace(_MATCH_HTML, function(m) {
return _ENCODE_HTML_RULES[m] || m;
});
if (result === '' + html) return html;
else return result;
};
var jadeWithBetterEscape = {
escape: betterEscape
};
function jadeJoin(locals, jade){
var buf = [];
var jade_mixins = {};
var jade_interp;
;var locals_for_with = (locals || {});(function (things, undefined) {
buf.push("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>");
// iterate things
;(function(){
var $$obj = things;
if ('number' == typeof $$obj.length) {
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
} else {
var $$l = 0;
for (var $index in $$obj) {
$$l++; var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
}
}).call(this);
buf.push("</body></html>");}.call(this,"things" in locals_for_with?locals_for_with.things:typeof things!=="undefined"?things:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join("");
}
function jadeText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
;var locals_for_with = (locals || {});(function (things, undefined) {
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate things
;(function(){
var $$obj = things;
if ('number' == typeof $$obj.length) {
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
} else {
var $$l = 0;
for (var $index in $$obj) {
$$l++; var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
}
}).call(this);
text += "</body></html>";}.call(this,"things" in locals_for_with?locals_for_with.things:typeof things!=="undefined"?things:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return text;
}
function jadeBetterForLoopJoin(locals, jade){
var buf = [];
var jade_mixins = {};
var jade_interp;
;var locals_for_with = (locals || {});(function (things, undefined) {
buf.push("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>");
// iterate things
;(function(){
var $$obj = things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
}).call(this);
buf.push("</body></html>");}.call(this,"things" in locals_for_with?locals_for_with.things:typeof things!=="undefined"?things:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join("");
}
function jadeBetterForLoopText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
;var locals_for_with = (locals || {});(function (things, undefined) {
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate things
;(function(){
var $$obj = things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
}).call(this);
text += "</body></html>";}.call(this,"things" in locals_for_with?locals_for_with.things:typeof things!=="undefined"?things:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return text;
}
function jadeInlineForLoopJoin(locals, jade){
var buf = [];
var jade_mixins = {};
var jade_interp;
;var locals_for_with = (locals || {});(function (things, undefined) {
buf.push("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>");
// iterate things
var $$obj = things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
buf.push("</body></html>");}.call(this,"things" in locals_for_with?locals_for_with.things:typeof things!=="undefined"?things:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join("");
}
function jadeInlineForLoopText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
;var locals_for_with = (locals || {});(function (things, undefined) {
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate things
var $$obj = things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
text += "</body></html>";}.call(this,"things" in locals_for_with?locals_for_with.things:typeof things!=="undefined"?things:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return text;
}
function jadeSelfJoin(locals, jade){
var buf = [];
var jade_mixins = {};
var jade_interp;
var self = locals || {};
buf.push("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>");
// iterate self.things
;(function(){
var $$obj = self.things;
if ('number' == typeof $$obj.length) {
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
} else {
var $$l = 0;
for (var $index in $$obj) {
$$l++; var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
}
}).call(this);
buf.push("</body></html>");;return buf.join("");
}
function jadeSelfText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
var self = locals || {};
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate self.things
;(function(){
var $$obj = self.things;
if ('number' == typeof $$obj.length) {
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
} else {
var $$l = 0;
for (var $index in $$obj) {
$$l++; var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
}
}).call(this);
text += "</body></html>";;return text;
}
function jadeSelfBetterForLoopJoin(locals, jade){
var buf = [];
var jade_mixins = {};
var jade_interp;
var self = locals || {};
buf.push("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>");
// iterate self.things
;(function(){
var $$obj = self.things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
}).call(this);
buf.push("</body></html>");;return buf.join("");
}
function jadeSelfBetterForLoopText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
var self = locals || {};
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate self.things
;(function(){
var $$obj = self.things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
}).call(this);
text += "</body></html>";;return text;
}
function jadeSelfInlineLoopJoin(locals, jade){
var buf = [];
var jade_mixins = {};
var jade_interp;
var self = locals || {};
buf.push("<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>");
// iterate self.things
var $$obj = self.things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
buf.push("<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>");
}
buf.push("</body></html>");;return buf.join("");
}
function jadeSelfInlineLoopText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
var self = locals || {};
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate self.things
var $$obj = self.things;
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
text += "</body></html>";;return text;
}
function ejsOriginal(locals, escape, include, rethrow) {
var __output = [];
; function printThing (thing) {
; __output.push(" <p>")
; __output.push(escape(thing.a))
; __output.push("</p>\n <p>")
; __output.push(escape(thing.b))
; __output.push("</p>\n")
; }
; __output.push("\n<!DOCTYPE html>\n<html>\n <head>\n <title>Fortunes</title>\n </head>\n <body>\n <p>Interesting website</p>\n ")
; for (var i = 0; i < locals.things.length; i ++) {
printThing(locals.things[i])
}
; __output.push(" </body>\n</html>\n")
return __output.join("");
}
function ejsNoMixin(locals, escape, include, rethrow) {
var __output = [];
; __output.push("\n<!DOCTYPE html>\n<html>\n <head>\n <title>Fortunes</title>\n </head>\n <body>\n <p>Interesting website</p>\n ")
; for (var i = 0; i < locals.things.length; i ++) {
var thing = locals.things[i];
; __output.push(" <p>")
; __output.push(escape(thing.a))
; __output.push("</p>\n <p>")
; __output.push(escape(thing.b))
; __output.push("</p>\n")
}
; __output.push(" </body>\n</html>\n")
return __output.join("");
}
function jadeSelfDifferentArrayCheckText(locals, jade){
var text = "";
var jade_mixins = {};
var jade_interp;
var self = locals || {};
text += "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><p>Interesting website</p>";
// iterate self.things
;(function(){
var $$obj = self.things;
if ($$obj.length == null) {
for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) {
var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
} else {
var $$l = 0;
for (var $index in $$obj) {
$$l++; var thing = $$obj[$index];
text += "<p>" + (jade.escape(null == (jade_interp = thing.a) ? "" : jade_interp)) + "</p><p>" + (jade.escape(null == (jade_interp = thing.b) ? "" : jade_interp)) + "</p>";
}
}
}).call(this);
text += "</body></html>";;return text;
}
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
Jade using joins |
| ready |
Jade using joins with a better for loop |
| ready |
Jade using joins with an inline for loop |
| ready |
Jade self using joins |
| ready |
Jade self using joins with a better for loop |
| ready |
Jade self using joins with an inline for loop |
| ready |
EJS no mixin |
| ready |
EJS with mixin |
| ready |
Jade using text |
| ready |
Jade using text with a better for loop |
| ready |
Jade using text with an inline for loop |
| ready |
Jade self using text |
| ready |
Jade self using text with a better for loop |
| ready |
Jade self using text with an inline for loop |
| ready |
Jade self using text with a different array check |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.