jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
To test performance of jQuery template for outputting 100 rows each with 10 columns where the columns have fields that can trigger events.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js">
</script>
<script src="http://github.com/jquery/jquery-tmpl/raw/master/jquery.tmpl.js">
</script>
<script src="http://documentcloud.github.com/underscore/underscore.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 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}}";
var milkTmpl="\
{{#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>
Ready to run.
Test | Ops/sec | |
---|---|---|
jQuery templates |
| ready |
string padding method |
| ready |
Precompiled jQuery template |
| ready |
Underscore.js |
| ready |
mustache js |
| ready |
mustache Milk |
| ready |
Batman.js |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.