Transparency vs. other template engines
JavaScript performance comparison
Info
Transparency vs. other template engines. Based on http://jsperf.com/dom-vs-innerhtml-based-templating
Preparation code
<script src="http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.0.beta.6.js"></script>
<script src=http://code.jquery.com/jquery-1.7.1.min.js></script>
<script src="https://raw.github.com/leonidas/transparency/master/dist/transparency.min.js"></script>
<script src="http://distal.googlecode.com/svn/trunk/distal.js"></script>
<script src="https://raw.github.com/flatiron/plates/master/lib/plates.js"></script>
<script src="https://github.com/olado/doT/raw/master/doT.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout/master/build/knockout-raw.js_tmp"></script>
<style>
h2.header{
background-color: ghostwhite;
color: midnightblue;
padding: 3px 5px;
border: 1px solid #111111;
}
</style>
<h2 class="header">Transparency</h2>
<div id="transparency">
<h1 class='header'>1 Placeholder</h1>
<h2 class='header2'>2 Placeholder</h2>
<h3 class='header3'>3 Placeholder</h3>
<h4 class='header4'>4 Placeholder</h4>
<h5 class='header5'>5 Placeholder</h5>
<h6 class='header6'>6 Placeholder</h6>
<ul class='list'>
<li class='item'>Item placeholder</li>
</ul>
</div>
<h2 class="header">Handlebars</h2>
<div id="handlebars"></div>
<h2 class="header">Distal</h2>
<div id="distal">
<h1 data-qtext="header">1 Placeholder</h1>
<h2 data-qtext="header2">2 Placeholder</h2>
<h3 data-qtext="header3">3 Placeholder</h3>
<h4 data-qtext="header4">4 Placeholder</h4>
<h5 data-qtext="header5">5 Placeholder</h5>
<h6 data-qtext="header6">6 Placeholder</h6>
<ul>
<li data-qrepeat="m list" data-qtext="m">Item placeholder</li>
</ul>
</div>
<h2 class="header">Plates</h2>
<div id="platesTemplate" style="display:none;">
<h1 id='header'>1 Placeholder</h1>
<h2 id='header2'>2 Placeholder</h2>
<h3 id='header3'>3 Placeholder</h3>
<h4 id='header4'>4 Placeholder</h4>
<h5 id='header5'>5 Placeholder</h5>
<h6 id='header6'>6 Placeholder</h6>
<ul>
<li class='list'>Item placeholder</li>
</ul>
</div>
<div id="plates"></div>
<h2 class="header">doT.js</h2>
<div id="dot"></div>
<h2 class="header">Knockout</h2>
<div id="knockout">
<h1 data-bind="text: header">1 Placeholder</h1>
<h2 data-bind="text: header2">2 Placeholder</h2>
<h3 data-bind="text: header3">3 Placeholder</h3>
<h4 data-bind="text: header4">4 Placeholder</h4>
<h5 data-bind="text: header5">5 Placeholder</h5>
<h6 data-bind="text: header6">6 Placeholder</h6>
<ul data-bind="foreach: list">
<li><span data-bind="text: $data">Item placeholder</span></li>
</ul>
</div>
<script>
Benchmark.prototype.setup = function() {
window.sharedVariables = {
header: "Header",
header2: "Header2",
header3: "Header3",
header4: "Header4",
header5: "Header5",
header6: "Header6",
list: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
};
window.transparencyTemplate = document.getElementById('transparency');
window.distalTemplate = document.getElementById('distal');
window.handlebarsTemplate = Handlebars.compile("<div><h1 class='header'>{{header}}</h1><h2 class='header2'>{{header2}}</h2><h3 class='header3'>{{header3}}</h3><h4 class='header4'>{{header4}}</h4><h5 class='header5'>{{header5}}</h5><h6 class='header6'>{{header6}}</h6><ul class='list'>{{#list}}<li class='item'>{{this}}</li>{{/list}}</ul></div>");
window.handlebarsOutput = document.getElementById('handlebars');
window.platesTemplate = $('#platesTemplate').html();
window.platesOutput = document.getElementById("plates");
window.dotTemplate = doT.template("<div><h1>{{=it.header}}</h1><h2>{{=it.header2}}</h2><h3>{{=it.header3}}</h3><h4>{{=it.header4}}</h4><h5>{{=it.header5}}</h5><h6>{{=it.header6}}</h6><ul>{{~it.list:elem}}<li class='item'>{{=elem}}</li>{{~}}</ul></div>");
window.dotOutput = document.getElementById("dot");
window.knockoutTemplate = document.getElementById("knockout");
};
</script>
Preparation code output
Transparency
1 Placeholder
2 Placeholder
3 Placeholder
4 Placeholder
5 Placeholder
6 Placeholder
- Item placeholder
Handlebars
Distal
1 Placeholder
2 Placeholder
3 Placeholder
4 Placeholder
5 Placeholder
6 Placeholder
- Item placeholder
Plates
doT.js
Knockout
1 Placeholder
2 Placeholder
3 Placeholder
4 Placeholder
5 Placeholder
6 Placeholder
- Item placeholder
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
doT.js |
|
pending… |
Handlebars |
|
pending… |
Distal |
|
pending… |
Plates |
|
pending… |
Transparency |
|
pending… |
Knockout (list not working) |
|
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 Jarno Keskikangas
- Revision 2: published
- Revision 3: published by Jarno Keskikangas
- Revision 4: published by Jarno Keskikangas
- Revision 5: published by Jarno Keskikangas
- Revision 6: published by Jarno Keskikangas
- Revision 7: published
- Revision 8: published by Jarno Keskikangas
- Revision 10: published by Danny
- Revision 11: published by Danny
- Revision 17: published by aaronlks
- Revision 18: published
- Revision 19: published
- Revision 20: published by Jerome
- Revision 21: published
- Revision 22: published
- Revision 23: published
0 comments