Performance comparison of jQuery Template vs String append vs Other methods for table_Ver02
JavaScript performance comparison
Info
To test performance of jQuery template for outputting 100 rows each with 15 columns where the columns have fields that can trigger events.
Preparation code
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js"></script>
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://github.com/mhevery/mustache.js/raw/dot-notation/mustache.js"></script>
<script src="http://github.com/pvande/Milk/raw/master/dist/v1.2.0/milk.js"></script>
<script src="https://raw.github.com/Shopify/batman/master/lib/dist/batman.min.js"></script>
<script src="https://raw.github.com/BorisMoore/jsrender/master/jsrender.js"></script>
<script src="http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.0.beta.6.js" type="text/javascript"></script>
<script src="https://github.com/andyet/ICanHaz.js/raw/master/ICanHaz.min.js"></script>
<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<script src="http://twitter.github.com/hogan.js/builds/1.0.5/hogan-1.0.5.js">
</script>
<script src="https://raw.github.com/mgutz/doT/master/doT.runtime.min.js"></script>
<script src="http://cdn.kendostatic.com/2011.2.804/js/kendo.all.min.js"></script>
<script src="https://raw.github.com/aefxx/jQote2/master/jquery.jqote2.min.js"></script>
<script src="http://gist.github.com/raw/860240/cd98cacbdeee7eb2cfb2ca3ca76638dae2a5b1af/micro3.js"></script>
<script src="http://tempojs.com/tempo.js"></script>
<script type="text/javascript">
$(function() {
$('body').delegate('#table .edit a, #table .select a', 'click', function() {
var $td = $(this).closest('td');
$td.find('input, select').show();
$td.find('a').hide();
});
$('body').delegate('#table .edit .cancel, $table .select .cancel', 'click', function() {
var $td = $(this).closest('td');
$td.find('input, select').hide();
$td.find('a').show();
});
});
function DummyFunction() {
var prefix = "Hello";
var suffix = "Wolrd!";
var greeting = prefix + " " + suffix;
alert(greeting);
}
</script>
<script type="text/x-jquery-tmpl" id="jqueryTmpl">
<tr>
<td>
<td><input type="checkbox" value="${id}" /></td>
<td>${name}</td>
<td>${custName}</td>
<td>${winlost}</td>
<td>${turnover}</td>
<td>${margin}</td>
<td>${betcount}</td>
<td><div class="ipViewLink" onclick="DummyFunction();">${ip}</div></td>
<td>${hasData}</td>
<td>${sporttypeId}</td>
<td>${sporttypeName}</td>
<td class="edit">
<a>Edit</a>
<input style="display:none;" type="hidden" value="Blah" />
<input class="cancel" type="button" value="cancel" />
</td>
<td class="select">
<a>Select</a>
<select style="display:none;">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class="cancel" type="button" value="cancel" />
</td>
<td>More string</td>
<td>More string</td>
</tr>
</script>
<script id="jsrendertmpl" type="text/x-jsrender">
{{for rows}}
<tr>
<td><input type = 'checkbox' value = '{{:id}}' /></td>
<td>{{:name}}</td>
<td>{{:custName}}</td>
<td>{{:winlost}}</td>
<td>{{:turnover}}</td>
<td>{{:margin}}</td>
<td>{{:betcount}}</td>
<td><div class='ipViewLink' onclick='DummyFunction();'>{{:ip}}</div></td>
<td>{{:hasData}}</td>
<td>{{:sporttypeId}}</td>
<td>{{:sporttypeName}}</td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr>
{{/for}}
</script>
<script type="text/x-handlebars-template" id="handlebarsTmpl">
{{#each this}}
{{#with this}}
<tr>
<td><input type = "checkbox" value = "{{id}}" /></td>
<td>{{name}}</td>
<td>{{custName}}</td>
<td>{{winlost}}</td>
<td>{{turnover}}</td>
<td>{{margin}}</td>
<td>{{betcount}}</td>
<td><div class="ipViewLink" onclick="DummyFunction();">{{ip}}</div></td>
<td>{{hasData}}</td>
<td>{{sporttypeId}}</td>
<td>{{sporttypeName}}</td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr>
{{/with}}
{{/each}}
</script>
<script type="text/html" id="icanhazTmpl">
{{#rows}}
<tr>
<td><input type = "checkbox" value = "{{id}}" /></td>
<td>{{name}}</td>
<td>{{custName}}</td>
<td>{{winlost}}</td>
<td>{{turnover}}</td>
<td>{{margin}}</td>
<td>{{betcount}}</td>
<td><div class="ipViewLink" onclick="DummyFunction();">{{ip}}</div></td>
<td>{{hasData}}</td>
<td>{{sporttypeId}}</td>
<td>{{sporttypeName}}</td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr>
{{/rows}}
</script>
<script id="kendouiTemplate" type="text/x-kendo-template">
<div id="content">
<# for (var i = 0, l = rows.length; i < l; i++) { #>
<tr>
<td><input type = 'checkbox' value = '<#= rows[i].id #>' /></td>
<td><#= rows[i].name #></td>
<td><#= rows[i].custName #></td>
<td><#= rows[i].winlost #></td>
<td><#= rows[i].turnover #></td>
<td><#= rows[i].margin #></td>
<td><#= rows[i].betcount #></td>
<td><div class='ipViewLink' onclick='DummyFunction();'><#= rows[i].ip #></div></td>
<td><#= rows[i].hasData #></td>
<td><#= rows[i].sporttypeId #></td>
<td><#= rows[i].sporttypeName#></td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr >
<# } #>
</div>
</script>
<script id="kendouiTemplate2" type="text/x-kendo-template">
<div id="content">
<# for (var i = 0, l = data.length; i < l; i++) { #>
<tr>
<td><input type = 'checkbox' value = '<#= data[i].id #>' /></td>
<td><#= data[i].name #></td>
<td><#= data[i].custName #></td>
<td><#= data[i].winlost #></td>
<td><#= data[i].turnover #></td>
<td><#= data[i].margin #></td>
<td><#= data[i].betcount #></td>
<td><div class='ipViewLink' onclick='DummyFunction();'><#= data[i].ip #></div></td>
<td><#= data[i].hasData #></td>
<td><#= data[i].sporttypeId #></td>
<td><#= data[i].sporttypeName#></td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr >
<# } #>
</div>
</script>
<script id="jqote2Template" type="text/x-jqote-template">
<div id="content">
<% console.log(this.length); %>
<% for (var i = 0, l = this.rows.length; i < l; i++) { %>
<tr>
<td><input type = 'checkbox' value = '<%= this.rows[i].id %>' /></td>
<td><%= this.rows[i].name %></td>
<td><%= this.rows[i].custName %></td>
<td><%= this.rows[i].winlost %></td>
<td><%= this.rows[i].turnover %></td>
<td><%= this.rows[i].margin %></td>
<td><%= this.rows[i].betcount %></td>
<td><div class='ipViewLink' onclick='DummyFunction();'><%= this.rows[i].ip %></div></td>
<td><%= this.rows[i].hasData %></td>
<td><%= this.rows[i].sporttypeId %></td>
<td><%= this.rows[i].sporttypeName %></td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr >
<% } %>
</div>
</script>
<script id="jqote2Template_DirectData" type="text/x-jqote-template">
<div id="content">
<% for (var i = 0, l = this.length; i < l; i++) { %>
<tr>
<td><input type = 'checkbox' value = '<%= this[i].id %>' /></td>
<td><%= this[i].name %></td>
<td><%= this[i].custName %></td>
<td><%= this[i].winlost %></td>
<td><%= this[i].turnover %></td>
<td><%= this[i].margin %></td>
<td><%= this[i].betcount %></td>
<td><div class='ipViewLink' onclick='DummyFunction();'><%= this[i].ip %></div></td>
<td><%= this[i].hasData %></td>
<td><%= this[i].sporttypeId %></td>
<td><%= this[i].sporttypeName %></td>
<td class = 'edit'>
<a>Edit</a>
<input style='display:none;' type='hidden' value='Blah' />
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td class='select'>
<a>Select</a>
<select style = 'display:none;'>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class = 'cancel' type = 'button' value = 'cancel' />
</td>
<td>More string</td>
<td>More string</td>
</tr >
<% } %>
</div>
</script>
<script>
var data = [];
var numberOfRow = 100;
for (var i = 0; i < numberOfRow; i++) {
var row = {
id: i,
name: 'punter' + i,
custName: 'andrew',
winlost: (i * 2.2).toFixed(2),
turnover: i,
margin: i + '%',
betcount: i,
ip: '127.127.127.127',
hasData: false,
sporttypeId: 1,
sporttypeName: 'Soccer'
};
data.push(row);
}
var dataObject = {rows: data};
$.template("precompiledJqueryTmpl", document.getElementById("jqueryTmpl").innerHTML);
var underscoreTmpl = "\
<%for(var i=0;i<this.length;i++){%>\
<%var row=this[i];%> \
<tr>\
<td><input type = 'checkbox' value = '<%= row.id%>' /></td>\
<td><%= row.name%></td>\
<td><%= row.custName%></td>\
<td><%= row.winlost%></td>\
<td><%= row.turnover%></td>\
<td><%= row.margin%></td>\
<td><%= row.betcount%></td>\
<td><div class='ipViewLink' onclick='DummyFunction();'><%= row.ip%></div></td>\
<td><%= row.hasData%></td>\
<td><%= row.sporttypeId%></td>\
<td><%= row.sporttypeName%></td>\
<td class = 'edit'>\
<a>Edit</a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a> \
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td> \
<td>More string</td>\
</tr ><%}%>";
var underscoreTmplOrigin = "\
<%for(var i=0;i<rows.length;i++){%>\
<%var row=rows[i];%> \
<tr>\
<td><input type = 'checkbox' value = '<%= row.id%>' /></td>\
<td><%= row.name%></td>\
<td><%= row.custName%></td>\
<td><%= row.winlost%></td>\
<td><%= row.turnover%></td>\
<td><%= row.margin%></td>\
<td><%= row.betcount%></td>\
<td><div class='ipViewLink' onclick='DummyFunction();'><%= row.ip%></div></td>\
<td><%= row.hasData%></td>\
<td><%= row.sporttypeId%></td>\
<td><%= row.sporttypeName%></td>\
<td class = 'edit'>\
<a>Edit</a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a> \
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td> \
<td>More string</td>\
</tr ><%}%>";
var mustacheTmpl="\
{{#rows}}\
<tr>\
<td><input type = 'checkbox' value = '{{id}}' /></td>\
<td>{{name}}</td>\
<td>{{custName}}</td>\
<td>{{winlost}}</td>\
<td>{{turnover}}</td>\
<td>{{margin}}</td>\
<td>{{betcount}}</td>\
<td><div class='ipViewLink' onclick='DummyFunction();'>{{ip}}</div></td>\
<td>{{hasData}}</td>\
<td>{{sporttypeId}}</td>\
<td>{{sporttypeName}}</td>\
<td class = 'edit'>\
<a>Edit</a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a>\
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td>\
<td>More string</td>\
</tr >{{/rows}}";
var milkTmpl="\
{{#rows}}\
<tr>\
<td><input type = 'checkbox' value = '{{id}}' /> </td>\
<td>{{name}}</td>\
<td>{{custName}}</td>\
<td>{{winlost}}</td>\
<td>{{turnover}}</td>\
<td>{{margin}}</td>\
<td>{{betcount}}</td>\
<td><div class='ipViewLink' onclick='DummyFunction();'>{{ip}}</div></td>\
<td>{{hasData}}</td>\
<td>{{sporttypeId}}</td>\
<td>{{sporttypeName}}</td>\
<td class = 'edit'>\
<a> Edit </a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a>\
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select> \
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td>\
<td>More string</td>\
</tr >{{/rows}}";
var jsRenderTmpl = $.templates( "#jsrendertmpl" );
var handlebarsTmpl = Handlebars.compile($("#handlebarsTmpl").html());
var hoganTemplate = Hogan.compile("{{#rows}}\
<tr>\
<td><input type = 'checkbox' value = '{{id}}' /></td>\
<td>{{name}}</td>\
<td>{{custName}}</td>\
<td>{{winlost}}</td>\
<td>{{turnover}}</td>\
<td>{{margin}}</td>\
<td>{{betcount}}</td>\
<td><div class='ipViewLink' onclick='DummyFunction();'>{{ip}}</div></td>\
<td>{{hasData}}</td>\
<td>{{sporttypeId}}</td>\
<td>{{sporttypeName}}</td>\
<td class = 'edit'>\
<a>Edit</a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a>\
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td>\
<td>More string</td>\
</tr >\
{{/rows}}");
var handlebarsPrecompiled = Handlebars.compile("{{#each rows}}\
{{#with this}}\
<tr>\
<td><input type = 'checkbox' value = '{{id}}' /></td>\
<td>{{name}}</td>\
<td>{{custName}}</td>\
<td>{{winlost}}</td>\
<td>{{turnover}}</td>\
<td>{{margin}}</td>\
<td>{{betcount}}</td>\
<td><div class='ipViewLink' onclick='DummyFunction();'>{{ip}}</div></td>\
<td>{{hasData}}</td>\
<td>{{sporttypeId}}</td>\
<td>{{sporttypeName}}</td>\
<td class = 'edit'>\
<a>Edit</a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a>\
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td>\
<td>More string</td>\
</tr>\
{{/with}}\
{{/each}}");
var kendouiTemplate = kendo.template($("#kendouiTemplate").html());
var kendouiTemplate2 = kendo.template($("#kendouiTemplate2").html(), {useWithBlock:false});
var jqote2Template = $.jqotec($('#jqote2Template'));
var jqote2Template_DirectData= $.jqotec($('#jqote2Template_DirectData'));
var resigTemplate3 = tmpl3("<div id='content'>\
<% for (var i = 0, l = data.length; i < l; i++) { %>\
<tr>\
<td><input type = 'checkbox' value = '<%= data[i].id %>' /></td>\
<td><%= data[i].name %></td>\
<td><%= data[i].custName %></td>\
<td><%= data[i].winlost %></td>\
<td><%= data[i].turnover %></td>\
<td><%= data[i].margin %></td>\
<td><%= data[i].betcount %></td>\
<td><div class='ipViewLink' onclick='DummyFunction();'><%= data[i].ip %></div></td>\
<td><%= data[i].hasData %></td>\
<td><%= data[i].sporttypeId %></td>\
<td><%= data[i].sporttypeName %></td>\
<td class = 'edit'>\
<a>Edit</a>\
<input style='display:none;' type='hidden' value='Blah' />\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td class='select'>\
<a>Select</a>\
<select style = 'display:none;'>\
<option>0</option>\
<option>1</option>\
<option>2</option>\
<option>3</option>\
<option>4</option>\
<option>5</option>\
<option>6</option>\
<option>7</option>\
<option>8</option>\
<option>9</option>\
<option>10</option>\
</select>\
<input class = 'cancel' type = 'button' value = 'cancel' />\
</td>\
<td>More string</td>\
<td>More string</td>\
</tr>\
<% } %>\
</div>");
function resig_micro(str) {
var strFunc =
"var p=[];p.push('" +
str.replace(/[\r\t\n]/g, " ")
.replace(/'(?=[^#]*#>)/g, "\t")
.split("'").join("\\'")
.split("\t").join("'")
.replace(/<#=(.+?)#>/g, "',$1,'")
.split("<#").join("');")
.split("#>").join("p.push('")
+ "');return p.join('');";
return new Function("data", strFunc);
}
// Template (identical to Kendo UI template syntax)
var resig_micro_template = "<div id='content'><# for (var i = 0, l = data.length; i < l; i++) { #><tr><td><input type = 'checkbox' value = '<#= data[i].id #>' /></td><td><#= data[i].name #></td><td><#= data[i].custName #></td><td><#= data[i].winlost #></td><td><#= data[i].turnover #></td><td><#= data[i].margin #></td><td><#= data[i].betcount #></td><td><div class='ipViewLink' onclick='DummyFunction();'><#= data[i].ip #></div></td><td><#= data[i].hasData #></td><td><#= data[i].sporttypeId #></td><td><#= data[i].sporttypeName#></td><td class = 'edit'><a>Edit</a><input style='display:none;' type='hidden' value='Blah' /><input class = 'cancel' type = 'button' value = 'cancel' /></td><td class='select'><a>Select</a><select style = 'display:none;'><option>0</option><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option></select><input class = 'cancel' type = 'button' value = 'cancel' />/td><td>More string</td><td>More string</td></tr><# } #></div>";
// Precompile
var resig_micro_func = resig_micro(resig_micro_template);
</script>
<script>
Benchmark.prototype.setup = function() {
var numberOfRow = 100;
};
</script>
Preparation code output
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
JQueryTemplate |
|
pending… |
PrecompiledJQueryTemplate |
|
pending… |
StringPaddingMethod |
|
pending… |
Underscore.js |
|
pending… |
Mustache.js |
|
pending… |
MustacheMilk |
|
pending… |
StringPaddingMethod02 |
|
pending… |
Jsrender |
|
pending… |
Handlebars.js |
|
pending… |
ICanHaz.js |
|
pending… |
StringPaddingMethod03 |
|
pending… |
StringPaddingMethod04 |
|
pending… |
StringConcat |
|
pending… |
StringConcatVer02 |
|
pending… |
StringConcatVer03 |
|
pending… |
Hogan.js |
|
pending… |
doT encodeHTML like rest |
|
pending… |
Handlebar.js (precompiled) |
|
pending… |
Kendo UI Templates |
|
pending… |
JQuote2 |
|
pending… |
Resig Micro-Templating with String concat |
|
pending… |
John Resig's Micro-Templating |
|
pending… |
Kendo UI Templates_Not UseWithBlock |
|
pending… |
Compare results of other browsers
Revisions
You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:
- Revision 1: published by Chi Chan
- Revision 5: published by Chi Chan
- Revision 6: published by Sharath Satish
- Revision 7: published
- Revision 8: published by Anil K
- Revision 9: published by Kevin Mee
- Revision 10: published
- Revision 11: published and last updated
- Revision 12: published by Harry Brundage
- Revision 13: published
- Revision 15: published by Bryan Chow
- Revision 16: published
- Revision 17: published
- Revision 18: published
- Revision 19: published
- Revision 20: published
- Revision 21: published by Bharath
- Revision 23: published by Sammy
- Revision 25: published
- Revision 30: published
- Revision 31: published
- Revision 32: published
- Revision 33: published
- Revision 35: published
- Revision 36: published
- Revision 37: published
- Revision 38: published
- Revision 39: published by andy matthews
- Revision 40: published
- Revision 41: published
- Revision 42: published
- Revision 43: published
- Revision 45: published by Dayakar Muluka
- Revision 46: published
- Revision 47: published
- Revision 48: published
- Revision 49: published
- Revision 50: published by Mauricio Wolff
- Revision 51: published by Mauricio Wolff
- Revision 52: published by Larry Davis
- Revision 53: published by Nguyen Trang Hong Bao
- Revision 61: published by Nguyen Trang Hong Bao
- Revision 62: published by Nguyen Trang Hong Bao
- Revision 63: published by Nguyen Trang Hong Bao
- Revision 70: published by Nguyen Trang Hong Bao
- Revision 71: published by Nguyen Trang Hong Bao
- Revision 72: published by Nguyen Trang Hong Bao
- Revision 74: published by atma
- Revision 76: published
- Revision 77: published
- Revision 79: published
- Revision 80: published
- Revision 81: published
- Revision 82: published
- Revision 83: published
- Revision 84: published
- Revision 85: published
- Revision 86: published
- Revision 87: published
- Revision 90: published by Vlad
- Revision 91: published
- Revision 93: published by Leonardo
- Revision 94: published by Leonardo
- Revision 95: published by pp
- Revision 96: published
- Revision 97: published
- Revision 98: published
- Revision 99: published by Leo Sanchez
- Revision 100: published by George Reith
1 comment
Lots of errors - the 7 bottom ones failed! Ran with with IE9.