performance comparison of jQuery Template vs underscore vs string append for table
JavaScript performance comparison
Info
To test performance of jQuery template for outputting 100 rows each with 10 columns where the columns have fields that can trigger events.
Preparation code
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.0/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="https://raw.github.com/janl/mustache.js/master/mustache.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();
});
});
</script>
<script type="text/x-jquery-tmpl" id="tmplRow">
< tr > < td > < input type = "checkbox"
value = "${id}" / > < /td>
<td>${firstName} ${lastName}</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>
<td>More string</td > < td > More string < /td>
<td>More string</td > < td > More string < /td>
</tr >
</script>
<script>
var data = [];
for (var i = 0; i < 100; i++) {
var row = {
id: i,
firstName: 'john',
lastName: 'doe'
};
data.push(row);
}
$.template("savedTmpl", document.getElementById("tmplRow").innerHTML);
var underscoreTmpl = "\
<%for(var i=0;i<rows.length;i++){%>\
<%var row=rows[i];%> \
<tr> \
<td> <input type = 'checkbox' value = '<%= row.id%>' /> </td>\
<td><%= row.firstname%> <%= row.lastname%></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>\
<td>More string</td> \
<td>More string</td>\
<td>More string</td> \
<td>More string</td>\
</tr ><%}%>";
var mustacheTmpl = "\
{{rows}}\
<tr> \
<td> <input type = 'checkbox' value = '{{id}}' /> </td>\
<td>{{firstname}} {{lastname}}</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>\
<td>More string</td> \
<td>More string</td>\
<td>More string</td> \
<td>More string</td>\
</tr >{{/rows}}"
</script>
Preparation code output
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
jQuery templates |
|
pending… |
string padding method |
|
pending… |
Precompiled jQuery template |
|
pending… |
Underscore.js |
|
pending… |
mustache js |
|
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
0 comments