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
The goal is to test Knockout performance (using Native Templating) between:
See: http://knockoutjs.com/documentation/template-binding.html
<h2>KO's Native Templating Performance Test</h2>
<h3>Not Using Template Binding</h3>
<div id="noTemplateBinding">
BirthDate: <span data-bind="text: birthDate" ></span>
<br />
AnniversaryDate: <span data-bind="text: anniversaryDate" ></span>
<br />
ParoleDate: <span data-bind="text: paroleDate" ></span>
<br />
</div>
<hr />
<h3>Using Script Tag Binding</h3>
<div id="scriptTagBinding">
<!-- ko template: { name: 'birthDate-template', data: birthDate } -->
<!-- /ko -->
<br />
<!-- ko template: { name: 'anniversaryDate-template', data: anniversaryDate } -->
<!-- /ko -->
<br />
<!-- ko template: { name: 'paroleDate-template', data: paroleDate } -->
<!-- /ko -->
<br />
</div>
<script type="text/html" id="birthDate-template">
BirthDates: <span data-bind="text: $data" />
</script>
<script type="text/html" id="anniversaryDate-template">
AnniversaryDate: <span data-bind="text: $data" />
</script>
<script type="text/html" id="paroleDate-template">
ParoleDate: <span data-bind="text: $data" />
</script>
<h3>Using Template Tag Binding</h3>
<div id="templateTagBinding">
<!-- ko template: { name: 'birthDate-tmpl', data: birthDate } -->
<!-- /ko -->
<br />
<!-- ko template: { name: 'anniversaryDate-tmpl', data: anniversaryDate } -->
<!-- /ko -->
<br />
<!-- ko template: { name: 'paroleDate-tmpl', data: paroleDate } -->
<!-- /ko -->
<br />
</div>
<template id="birthDate-tmpl">
BirthDates: <span data-bind="text: $data" />
</template>
<template id="anniversaryDate-tmpl">
AnniversaryDate: <span data-bind="text: $data" />
</template>
<template id="paroleDate-tmpl">
ParoleDate: <span data-bind="text: $data" />
</template>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js"></script>
var ViewModel = function() {
var self = this;
//---Properties---
self.birthDate = ko.observable( "July 1" );
self.anniversaryDate = ko.observable( "July 2" );
self.paroleDate = ko.observable( "July 3" );
//---Behavior---
self.changeData = function() {
var now = new Date();
self.birthDate( now.getTime() );
self.anniversaryDate( now.getTime() );
self.paroleDate( now.getTime() );
}
};
window.alr = false;
if (window.alr) return;
//---ACTIVATE KO---
var viewModel1 = new ViewModel();
ko.applyBindings( viewModel1, document.getElementById( "noTemplateBinding" ) );
//---ACTIVATE KO---
var viewModel2 = new ViewModel();
ko.applyBindings( viewModel2, document.getElementById( "scriptTagBinding" ) );
//---ACTIVATE KO---
var viewModel3 = new ViewModel();
ko.applyBindings( viewModel3, document.getElementById( "templateTagBinding" ) );
window.alr = true;
Ready to run.
Test | Ops/sec | |
---|---|---|
No Template Binding |
| ready |
Script Tag Binding |
| ready |
Template Tag Binding |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.