Handlebars.js vs Mustache.js
JavaScript performance comparison
Preparation code
<style type="text/css">
#output { overflow: hidden; } #output .sample { width: 45%; padding: 1%; border:
1px solid #ccc; float: left; }
</style>
<script src="//cdnjs.cloudflare.com/ajax/libs/mustache.js/0.3.0/mustache.min.js">
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0.beta2/handlebars.min.js">
</script>
<script id="template_one" type="text/template">
< h3 > {
{
header
}
} < /h3>
<ul>
{{#items}}
{{#first}}<li><strong>{{name}}</strong > < /li>{{/first
}
} {
{ ^ first
}
} < li > {
{#link
}
} < a href = "{{url}}" > {
{
/link}}{{name}}{{#link}}</a > {
{
/link}}</li > {
{
/first}}
{{/items
}
} < /ul>
{{#double}}
<p>Double rainbow!</p > {
{
/double}}
</script>
<div id="output">
<div class="sample">
<h2>
Mustache Renders
</h2>
<div id="mu">
</div>
</div>
<div class="sample">
<h2>
Handlebars Renders
</h2>
<div id="hb">
</div>
</div>
</div>
<script>
Benchmark.prototype.setup = function() {
var template = document.getElementById('template_one').innerText,
data = {
"header": "Colors",
"items": [{
"name": "rainbow",
"first": true,
"url": "#Rainbow"
}, {
"name": "red",
"link": true,
"url": "#Red"
}, {
"name": "orange",
"link": true,
"url": "#Orange"
}, {
"name": "yellow",
"link": true,
"url": "#Yellow"
}, {
"name": "green",
"link": true,
"url": "#Green"
}, {
"name": "blue",
"link": true,
"url": "#Blue"
}, {
"name": "purple",
"link": true,
"url": "#Purple"
}, {
"name": "white",
"link": false,
"url": "#While"
}, {
"name": "black",
"link": false,
"url": "#Black"
}],
"double": true
},
hb_compiled;
ui.benchmarks[1].setup = function() {
hb_compiled = null;
};
ui.benchmarks[2].setup = function() {
hb_compiled = Handlebars.compile(template);
};
document.getElementById('mu').innerHTML = Mustache.to_html(template, data);
document.getElementById('hb').innerHTML = Handlebars.compile(template)(data);
};
</script>
Preparation code output
Mustache Renders
Handlebars Renders
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
Mustache to_html |
|
pending… |
Handlebars: compile + render |
|
pending… |
Handlebars: compile once + render |
|
pending… |
Handlebars: render only |
|
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 Curtis and last updated
- Revision 2: published
- Revision 3: published by curtisharvey
- Revision 7: published
- Revision 8: published by Pradeep Kumar
- Revision 11: published
- Revision 12: published
- Revision 16: published
- Revision 17: published
- Revision 18: published
- Revision 19: published
1 comment
Can I simply say what a comfort to uncover a person that actually understands what they're talking about over the internet. You definitely realize how to bring a problem to light and make it important. More and more people need to read this and understand this side of your story. I was surprised you aren't more popular given that you certainly possess the gift.