Precompiled Templates

JavaScript performance comparison

Test case created by take

Preparation code

<div id="template-mu">
<!--
<table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;">
  <caption>{{title}}</caption>
  <thead>
    <tr>
      <td style="width: 90px;"></td>
      {{#table.heads}}
      <th>{{.}}</th>
      {{/table.heads}}
    </tr>
  </thead>
  <tbody>
  {{#table.sections}}
  <tr>
    <td class="name" style="text-align: left;padding: 4px 0;">{{name}}</td>
    {{#section}}
    <td class="item" style="text-align: center;padding: 4px 0;">{{.}}</td>
    {{/section}}
  </tr>
  {{/table.sections}}
  </tbody>
</table>
-->
</div>
<div id="template-ejs">
<!--
<table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;">
  <caption><%=title%></caption>
  <thead>
    <tr>
      <td style="width: 90px;"></td>
      <%table.heads.forEach(function(head){%>
      <th><%=head%></th>
      <%})%>
    </tr>
  </thead>
  <tbody>
    <%table.sections.forEach(function(s){%>
    <tr>
      <td class="name" style="text-align: left;padding: 4px 0;"><%=s.name%></td>
      <%s.section.forEach(function(section){%>
      <td class="item" style="text-align: center;padding: 4px 0;"><%=section%></td>
      <%})%>
    </tr>
    <%})%>
  </tbody>
</table>
-->
</div>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/hogan.js/2.0.0/hogan.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.rc.2/handlebars.min.js"></script>
<script>
// visionmedia EJS
ejs=function(){function require(p){if("fs"==p)return{};var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');return mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path))),mod.exports}return require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&&reg||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.substr(0,1))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i<segs.length;i++){var seg=segs[i];".."==seg?path.pop():"."!=seg&&path.push(seg)}return require(path.join("/"))}},require.register("ejs.js",function(module,exports,require){var utils=require("./utils"),fs=require("fs");exports.version="0.7.2";var filters=exports.filters=require("./filters"),cache={};exports.clearCache=function(){cache={}};function filtered(js){return js.substr(1).split("|").reduce(function(js,filter){var parts=filter.split(":"),name=parts.shift(),args=parts.shift()||"";return args&&(args=", "+args),"filters."+name+"("+js+args+")"})}function rethrow(err,str,filename,lineno){var lines=str.split("\n"),start=Math.max(lineno-3,0),end=Math.min(lines.length,lineno+3),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" >> ":"    ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"ejs")+":"+lineno+"\n"+context+"\n\n"+err.message,err}var parse=exports.parse=function(str,options){var options=options||{},open=options.open||exports.open||"<%",close=options.close||exports.close||"%>",buf=["var buf = [];","\nwith (locals) {","\n  buf.push('"],lineno=1,consumeEOL=!1;for(var i=0,len=str.length;i<len;++i)if(str.slice(i,open.length+i)==open){i+=open.length;var prefix,postfix,line="__stack.lineno="+lineno;switch(str.substr(i,1)){case"=":prefix="', escape(("+line+", ",postfix=")), '",++i;break;case"-":prefix="', ("+line+", ",postfix="), '",++i;break;default:prefix="');"+line+";",postfix="; buf.push('"}var end=str.indexOf(close,i),js=str.substring(i,end),start=i,n=0;"-"==js[js.length-1]&&(js=js.substring(0,js.length-2),consumeEOL=!0);while(~(n=js.indexOf("\n",n)))n++,lineno++;js.substr(0,1)==":"&&(js=filtered(js)),buf.push(prefix,js,postfix),i+=end-start+close.length-1}else str.substr(i,1)=="\\"?buf.push("\\\\"):str.substr(i,1)=="'"?buf.push("\\'"):str.substr(i,1)=="\r"?buf.push(" "):str.substr(i,1)=="\n"?consumeEOL?consumeEOL=!1:(buf.push("\\n"),lineno++):buf.push(str.substr(i,1));return buf.push("');\n}\nreturn buf.join('');"),buf.join("")},compile=exports.compile=function(str,options){options=options||{};var input=JSON.stringify(str),filename=options.filename?JSON.stringify(options.filename):"undefined";str=["var __stack = { lineno: 1, input: "+input+", filename: "+filename+" };",rethrow.toString(),"try {",exports.parse(str,options),"} catch (err) {","  rethrow(err, __stack.input, __stack.filename, __stack.lineno);","}"].join("\n"),options.debug&&console.log(str);var fn=new Function("locals, filters, escape",str);return function(locals){return fn.call(this,locals,filters,utils.escape)}};exports.render=function(str,options){var fn,options=options||{};if(options.cache){if(!options.filename)throw new Error('"cache" option requires "filename".');fn=cache[options.filename]||(cache[options.filename]=compile(str,options))}else fn=compile(str,options);return options.__proto__=options.locals,fn.call(options.scope,options)},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={}),options.filename=path;try{var str=options.cache?cache[key]||(cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");fn(null,exports.render(str,options))}catch(err){fn(err)}},exports.__express=exports.renderFile,require.extensions?require.extensions[".ejs"]=function(module,filename){source=require("fs").readFileSync(filename,"utf-8"),module._compile(compile(source,{}),filename)}:require.registerExtension&&require.registerExtension(".ejs",function(src){return compile(src,{})})}),require.register("filters.js",function(module,exports,require){exports.first=function(obj){return obj[0]},exports.last=function(obj){return obj[obj.length-1]},exports.capitalize=function(str){return str=String(str),str[0].toUpperCase()+str.substr(1,str.length)},exports.downcase=function(str){return String(str).toLowerCase()},exports.upcase=function(str){return String(str).toUpperCase()},exports.sort=function(obj){return Object.create(obj).sort()},exports.sort_by=function(obj,prop){return Object.create(obj).sort(function(a,b){return a=a[prop],b=b[prop],a>b?1:a<b?-1:0})},exports.size=exports.length=function(obj){return obj.length},exports.plus=function(a,b){return Number(a)+Number(b)},exports.minus=function(a,b){return Number(a)-Number(b)},exports.times=function(a,b){return Number(a)*Number(b)},exports.divided_by=function(a,b){return Number(a)/Number(b)},exports.join=function(obj,str){return obj.join(str||", ")},exports.truncate=function(str,len){return str=String(str),str.substr(0,len)},exports.truncate_words=function(str,n){var str=String(str),words=str.split(/ +/);return words.slice(0,n).join(" ")},exports.replace=function(str,pattern,substitution){return String(str).replace(pattern,substitution||"")},exports.prepend=function(obj,val){return Array.isArray(obj)?[val].concat(obj):val+obj},exports.append=function(obj,val){return Array.isArray(obj)?obj.concat(val):obj+val},exports.map=function(arr,prop){return arr.map(function(obj){return obj[prop]})},exports.reverse=function(obj){return Array.isArray(obj)?obj.reverse():String(obj).split("").reverse().join("")},exports.get=function(obj,prop){return obj[prop]},exports.json=function(obj){return JSON.stringify(obj)}}),require.register("utils.js",function(module,exports,require){exports.escape=function(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}),require("ejs")}();
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
      
<script>
Benchmark.prototype.setup = function() {
  // Handlebars
  (function(){var a=Handlebars.template,b=Handlebars.templates=Handlebars.templates||{};b["template.mustache"]=a(function(a,b,c,d,e){function n(a,b){var c="",d;return c+="\n      <th>",d=typeof a===j?a.apply(a):a,c+=k(d)+"</th>\n      ",c}function o(a,b){var d="",e,f,g;d+='\n  <tr>\n    <td class="name" style="text-align: left;padding: 4px 0;">',g=c.name,g?e=g.call(a,{hash:{},data:b}):(e=a.name,e=typeof e===j?e.apply(a):e),d+=k(e)+"</td>\n    ",g=c.section,g?e=g.call(a,{hash:{},inverse:l.noop,fn:l.program(4,p,b),data:b}):(e=a.section,e=typeof e===j?e.apply(a):e),f={},c.section||(e=m.call(a,e,{hash:f,inverse:l.noop,fn:l.program(4,p,b),data:b}));if(e||e===0)d+=e;return d+="\n  </tr>\n  ",d}function p(a,b){var c="",d;return c+='\n    <td class="item" style="text-align: center;padding: 4px 0;">',d=typeof a===j?a.apply(a):a,c+=k(d)+"</td>\n    ",c}c=c||a.helpers,e=e||{};var f="",g,h,i,j="function",k=this.escapeExpression,l=this,m=c.blockHelperMissing;f+='<table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;">\n  <caption>',i=c.title,i?g=i.call(b,{hash:{},data:e}):(g=b.title,g=typeof g===j?g.apply(b):g),f+=k(g)+'</caption>\n  <thead>\n    <tr>\n      <td style="width: 90px;"></td>\n      ',g=b.table,g=g==null||g===!1?g:g.heads,g=typeof g===j?g.apply(b):g,h={},g=m.call(b,g,{hash:h,inverse:l.noop,fn:l.program(1,n,e),data:e});if(g||g===0)f+=g;f+="\n    </tr>\n  </thead>\n  <tbody>\n  ",g=b.table,g=g==null||g===!1?g:g.sections,g=typeof g===j?g.apply(b):g,h={},g=m.call(b,g,{hash:h,inverse:l.noop,fn:l.program(3,o,e),data:e});if(g||g===0)f+=g;return f+="\n  </tbody>\n</table>",f})})();
      // template data
  var templates = {
        mustache:   $("#template-mu").html().trim().slice(5, -3),
        t_ejs:   $("#template-ejs").html().trim().slice(5, -3),
        hogan: new Hogan.Template(function(c,p,i){var _=this;_.b(i=i||"");_.b("<table border=\"1\" style=\"width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;\">");_.b("\n" + i);_.b("  <caption>");_.b(_.v(_.f("title",c,p,0)));_.b("</caption>");_.b("\n" + i);_.b("  <thead>");_.b("\n" + i);_.b("    <tr>");_.b("\n" + i);_.b("      <td style=\"width: 90px;\"></td>");_.b("\n" + i);if(_.s(_.d("table.heads",c,p,1),c,p,0,211,239,"{{ }}")){_.rs(c,p,function(c,p,_){_.b("      <th>");_.b(_.v(_.d(".",c,p,0)));_.b("</th>");_.b("\n");});c.pop();}_.b("    </tr>");_.b("\n" + i);_.b("  </thead>");_.b("\n" + i);_.b("  <tbody>");_.b("\n" + i);if(_.s(_.d("table.sections",c,p,1),c,p,0,308,511,"{{ }}")){_.rs(c,p,function(c,p,_){_.b("  <tr>");_.b("\n" + i);_.b("    <td class=\"name\" style=\"text-align: left;padding: 4px 0;\">");_.b(_.v(_.f("name",c,p,0)));_.b("</td>");_.b("\n" + i);if(_.s(_.f("section",c,p,1),c,p,0,408,488,"{{ }}")){_.rs(c,p,function(c,p,_){_.b("    <td class=\"item\" style=\"text-align: center;padding: 4px 0;\">");_.b(_.v(_.d(".",c,p,0)));_.b("</td>");_.b("\n");});c.pop();}_.b("  </tr>");_.b("\n");});c.pop();}_.b("  </tbody>");_.b("\n" + i);_.b("</table>");return _.fl();;}),
        handlebars: Handlebars.templates["template.mustache"],
        ejs: function anonymous(locals,filters,escape){escape=escape||function(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")};var __stack={lineno:1,input:'<table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;">\n  <caption><%=title%></caption>\n  <thead>\n    <tr>\n      <td style="width: 90px;"></td>\n      <%table.heads.forEach(function(head){%>\n      <th><%=head%></th>\n      <%})%>\n    </tr>\n  </thead>\n  <tbody>\n    <%table.sections.forEach(function(s){%>\n    <tr>\n      <td class="name" style="text-align: left;padding: 4px 0;"><%=s.name%></td>\n      <%s.section.forEach(function(section){%>\n      <td class="item" style="text-align: center;padding: 4px 0;"><%=section%></td>\n      <%})%>\n    </tr>\n    <%})%>\n  </tbody>\n</table>',filename:undefined};function rethrow(err,str,filename,lineno){var lines=str.split("\n"),start=Math.max(lineno-3,0),end=Math.min(lines.length,lineno+3);var context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" >> ":"    ")+curr+"| "+line}).join("\n");err.path=filename;err.message=(filename||"ejs")+":"+lineno+"\n"+context+"\n\n"+err.message;throw err;}try{var buf=[];with(locals||{}){buf.push('<table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;">\n  <caption>',escape((__stack.lineno=2,title)),'</caption>\n  <thead>\n    <tr>\n      <td style="width: 90px;"></td>\n      ');__stack.lineno=6;table.heads.forEach(function(head){buf.push("\n      <th>",escape((__stack.lineno=7,head)),"</th>\n      ");__stack.lineno=8});buf.push("\n    </tr>\n  </thead>\n  <tbody>\n    ");__stack.lineno=12;table.sections.forEach(function(s){buf.push('\n    <tr>\n      <td class="name" style="text-align: left;padding: 4px 0;">',escape((__stack.lineno=14,s.name)),"</td>\n      ");__stack.lineno=15;s.section.forEach(function(section){buf.push('\n      <td class="item" style="text-align: center;padding: 4px 0;">',escape((__stack.lineno=16,section)),"</td>\n      ");__stack.lineno=17});buf.push("\n    </tr>\n    ");__stack.lineno=19});buf.push("\n  </tbody>\n</table>")}return buf.join("")}catch(err){rethrow(err,__stack.input,__stack.filename,__stack.lineno)}}
    },
    // view data
    data = {
        title: "JavaScript Template Comparison",
        table: {
          heads: ["Mustache", "Hogan", "Handlebars", "Underscore", "EJS", "jQuery.EJS", "PURE"],
          sections: [
            {
              name: "delimiter",
              section: ["○", "○", "×", "○", "○", "○", "-"]
            },
            {
              name: "logic-less",
              section: ["○", "○", "○", "×", "×", "×", "◎"]
            },
            {
              name: "precompile",
              section: ["×", "○", "○", "×", "○", "×", "×"]
            },
            {
              name: "escape",
              section: ["○", "○", "○", "○", "○", "○", "△"]
            },
            {
              name: "method",
              section: ["○", "○", "◎", "○", "○", "◎", "○"]
            },
            {
              name: "standalone",
              section: ["○", "○", "○", "○", "○", "×", "×"]
            },
            {
              name: "partials",
              section: ["○", "○", "○", "×", "△", "×", "×"]
            }
          ]
        }
      };

};
</script>

Preparation code output

<div id="template-mu"> <!-- <table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;"> <caption>{{title}}</caption> <thead> <tr> <td style="width: 90px;"></td> {{#table.heads}} <th>{{.}}</th> {{/table.heads}} </tr> </thead> <tbody> {{#table.sections}} <tr> <td class="name" style="text-align: left;padding: 4px 0;">{{name}}</td> {{#section}} <td class="item" style="text-align: center;padding: 4px 0;">{{.}}</td> {{/section}} </tr> {{/table.sections}} </tbody> </table> --> </div> <div id="template-ejs"> <!-- <table border="1" style="width: 700px;font-size: 15px;text-align: center;border-collapse: collapse;"> <caption><%=title%></caption> <thead> <tr> <td style="width: 90px;"></td> <%table.heads.forEach(function(head){%> <th><%=head%></th> <%})%> </tr> </thead> <tbody> <%table.sections.forEach(function(s){%> <tr> <td class="name" style="text-align: left;padding: 4px 0;"><%=s.name%></td> <%s.section.forEach(function(section){%> <td class="item" style="text-align: center;padding: 4px 0;"><%=section%></td> <%})%> </tr> <%})%> </tbody> </table> --> </div> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.rc.2/handlebars.min.js"></script> <script> // visionmedia EJS ejs=function(){function require(p){if("fs"==p)return{};var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');return mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path))),mod.exports}return require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&&reg||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.substr(0,1))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i<segs.length;i++){var seg=segs[i];".."==seg?path.pop():"."!=seg&&path.push(seg)}return require(path.join("/"))}},require.register("ejs.js",function(module,exports,require){var utils=require("./utils"),fs=require("fs");exports.version="0.7.2";var filters=exports.filters=require("./filters"),cache={};exports.clearCache=function(){cache={}};function filtered(js){return js.substr(1).split("|").reduce(function(js,filter){var parts=filter.split(":"),name=parts.shift(),args=parts.shift()||"";return args&&(args=", "+args),"filters."+name+"("+js+args+")"})}function rethrow(err,str,filename,lineno){var lines=str.split("\n"),start=Math.max(lineno-3,0),end=Math.min(lines.length,lineno+3),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" >> ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"ejs")+":"+lineno+"\n"+context+"\n\n"+err.message,err}var parse=exports.parse=function(str,options){var options=options||{},open=options.open||exports.open||"<%",close=options.close||exports.close||"%>",buf=["var buf = [];","\nwith (locals) {","\n buf.push('"],lineno=1,consumeEOL=!1;for(var i=0,len=str.length;i<len;++i)if(str.slice(i,open.length+i)==open){i+=open.length;var prefix,postfix,line="__stack.lineno="+lineno;switch(str.substr(i,1)){case"=":prefix="', escape(("+line+", ",postfix=")), '",++i;break;case"-":prefix="', ("+line+", ",postfix="), '",++i;break;default:prefix="');"+line+";",postfix="; buf.push('"}var end=str.indexOf(close,i),js=str.substring(i,end),start=i,n=0;"-"==js[js.length-1]&&(js=js.substring(0,js.length-2),consumeEOL=!0);while(~(n=js.indexOf("\n",n)))n++,lineno++;js.substr(0,1)==":"&&(js=filtered(js)),buf.push(prefix,js,postfix),i+=end-start+close.length-1}else str.substr(i,1)=="\\"?buf.push("\\\\"):str.substr(i,1)=="'"?buf.push("\\'"):str.substr(i,1)=="\r"?buf.push(" "):str.substr(i,1)=="\n"?consumeEOL?consumeEOL=!1:(buf.push("\\n"),lineno++):buf.push(str.substr(i,1));return buf.push("');\n}\nreturn buf.join('');"),buf.join("")},compile=exports.compile=function(str,options){options=options||{};var input=JSON.stringify(str),filename=options.filename?JSON.stringify(options.filename):"undefined";str=["var __stack = { lineno: 1, input: "+input+", filename: "+filename+" };",rethrow.toString(),"try {",exports.parse(str,options),"} catch (err) {"," rethrow(err, __stack.input, __stack.filename, __stack.lineno);","}"].join("\n"),options.debug&&console.log(str);var fn=new Function("locals, filters, escape",str);return function(locals){return fn.call(this,locals,filters,utils.escape)}};exports.render=function(str,options){var fn,options=options||{};if(options.cache){if(!options.filename)throw new Error('"cache" option requires "filename".');fn=cache[options.filename]||(cache[options.filename]=compile(str,options))}else fn=compile(str,options);return options.__proto__=options.locals,fn.call(options.scope,options)},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={}),options.filename=path;try{var str=options.cache?cache[key]||(cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");fn(null,exports.render(str,options))}catch(err){fn(err)}},exports.__express=exports.renderFile,require.extensions?require.extensions[".ejs"]=function(module,filename){source=require("fs").readFileSync(filename,"utf-8"),module._compile(compile(source,{}),filename)}:require.registerExtension&&require.registerExtension(".ejs",function(src){return compile(src,{})})}),require.register("filters.js",function(module,exports,require){exports.first=function(obj){return obj[0]},exports.last=function(obj){return obj[obj.length-1]},exports.capitalize=function(str){return str=String(str),str[0].toUpperCase()+str.substr(1,str.length)},exports.downcase=function(str){return String(str).toLowerCase()},exports.upcase=function(str){return String(str).toUpperCase()},exports.sort=function(obj){return Object.create(obj).sort()},exports.sort_by=function(obj,prop){return Object.create(obj).sort(function(a,b){return a=a[prop],b=b[prop],a>b?1:a<b?-1:0})},exports.size=exports.length=function(obj){return obj.length},exports.plus=function(a,b){return Number(a)+Number(b)},exports.minus=function(a,b){return Number(a)-Number(b)},exports.times=function(a,b){return Number(a)*Number(b)},exports.divided_by=function(a,b){return Number(a)/Number(b)},exports.join=function(obj,str){return obj.join(str||", ")},exports.truncate=function(str,len){return str=String(str),str.substr(0,len)},exports.truncate_words=function(str,n){var str=String(str),words=str.split(/ +/);return words.slice(0,n).join(" ")},exports.replace=function(str,pattern,substitution){return String(str).replace(pattern,substitution||"")},exports.prepend=function(obj,val){return Array.isArray(obj)?[val].concat(obj):val+obj},exports.append=function(obj,val){return Array.isArray(obj)?obj.concat(val):obj+val},exports.map=function(arr,prop){return arr.map(function(obj){return obj[prop]})},exports.reverse=function(obj){return Array.isArray(obj)?obj.reverse():String(obj).split("").reverse().join("")},exports.get=function(obj,prop){return obj[prop]},exports.json=function(obj){return JSON.stringify(obj)}}),require.register("utils.js",function(module,exports,require){exports.escape=function(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}),require("ejs")}(); </script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
[precompiled] Hogan.js
templates.hogan.render(data);
pending…
[precompiled] Handlebars.js
templates.handlebars(data);
pending…
[precompiled] EJS
templates.ejs(data);
pending…
Hogan.js
Hogan.compile(templates.mustache).render(data);
pending…
Handlebars.js
Handlebars.compile(templates.mustache)(data);
pending…
EJS
ejs.compile(templates.t_ejs)(data);
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 Comments