Test case details Title *
Description (Markdown syntax is allowed)
Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries)
<script src ="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js" > </script >
<script src ="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.3.0/handlebars.min.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.4/ember-template-compiler.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.4/ember.min.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/mithril/0.2.0/mithril.min.js" > </script >
<script src ="https://cdnjs.cloudflare.com/ajax/libs/vue/0.12.7/vue.min.js" > </script >
<script src ="https://rawgit.com/magnumjs/mag.js/master/dist/mag.0.11.9.min.js" > </script >
<script src ="https://cdn.rawgit.com/MaxArt2501/object-observe/master/dist/object-observe.min.js" > </script >
<script src ="https://rawgit.com/magnumjs/mag.js/master/src/mag.addons.js" > </script >
jQuery:
<div id ="jq_test" > </div >
<script >
var jqEl = $('#jq_test' );
var children = '' ;
var jqPush = function (data ) {
jqEl.append ('<span>' + data + '</span>' );
}
var jqClear = function ( ) {
jqEl.empty ();
}
</script >
<div ng-app ="app" ng-jq >
Angular:
<span ng-controller ="Ctrl" id ="angList" > <span ng-repeat ="item in data track by item" > {{::item}}</span > </span >
</div >
<div id ="koapp" >
Knockout:
<span data-bind ="foreach: data" > <span data-bind ="text: $data" > </span > </span >
</div >
<div id ="emapp" > </div >
<script type ="text/x-handlebars" >
Ember :
<span >
{{#each EMapp.data}}<span > {{this}}</span > {{/each}}
</span >
</script >
<div id ="react" >
React: <span id ="reactMountNode" > </span >
</div >
<div id ="mithrilapp" >
Mithril: <span id ="mithrilMountNode" > </span >
</div >
<div id ="vuejs" >
Vuejs: <span id ="vuejsMountNode" > <span v-repeat ="item: data" > {{ item }}</span > </span >
</div >
<div id ="magjsapp" >
MagJS: <div >
<span id ="magjsappMountNode" > <span class ="magjsdata" > </span > </span > </div >
</div >
<script >
window .getId = function (idx )
{
var d = Date .now () + "" ;
return idx + "-" + d.substring (d.length - 6 );
};
angular.module ('app' , [])
.controller ('Ctrl' , ['$scope' , Ctrl ]);
function Ctrl ($scope ) {
$scope.data = [];
$scope.push = function (data ) {
$scope.data .push (data);
}
};
var KOData = ko.observableArray ();
var KOviewmodel = {data : KOData};
var ENV = {EXTEND_PROTOTYPES : false };
var ReactComponent = React .createClass ({displayName : 'PerfTest' ,
getInitialState : function ( ) {
return { data : [] };
},
render : function ( ) {
return (
React .createElement ("span" , null ,
this .state .data .map (function (result, i ) {
return React .createElement ("span" , {key : i}, result);
})
)
);
}
});
var MithrilData = new Array ();
var mithapp = {
controller : function ( ) {
this .data = MithrilData ;
},
view : function (ctrl ) {
return m ("span" , [ctrl.data .map (function (datum ) { return m ('span' , datum); })]);
}
}
$(document ).ready (function ( ) {
EMapp = Ember .Application .create ({
rootElement : '#emapp'
});
EMapp.data = Ember .A ();
window .EMclear = function ( ) {
EMapp.data .clear ();
};
window .EMpush = function (data ) {
EMapp.data .pushObject (data);
};
angular.element (document ).ready (function ( ) {
var ang_scope = angular.element (document .getElementById ('angList' )).scope ();
window .ANGclear = function ( ){
ang_scope.data = [];
ang_scope.$evalAsync();
};
window .ANGpush = function (data ){
ang_scope.push (data);
};
});
ko.applyBindings (KOviewmodel, document .getElementById ('koapp' ));
window .KOclear = function ( ){
KOData.splice (0 , KOData ().length );
};
window .KOpush = function (data ){
KOData.push (data);
};
var reactComp = React .render ( React .createElement (ReactComponent , null ), document .getElementById ('reactMountNode' ));
window .reactComp = reactComp;
window .RClear = function ( ) {
reactComp.state .data = [];
};
window .RPush = function (entry ) {
var stateData = reactComp.state .data ;
stateData.push (entry);
}
m.mount (document .getElementById ("mithrilMountNode" ), m.component (mithapp));
window .Mclear = function ( ) {
m.startComputation ();
MithrilData .splice (0 );
m.endComputation ();
};
window .Mpush = function (data ) {
MithrilData .push (data);
}
var vueInstance = new Vue ({
el : '#vuejsMountNode' ,
data : {
data : []
}
});
window .VueClear = function ( ){
vueInstance.data = []
};
window .VuePush = function (data ){
vueInstance.data .push (data);
};
var Mag JSData = ["TestMagJS" ];
var magjsdataNode = {
view : function (state, props ) {
state.magjsdata = Mag JSData;
}
}
var magjsapp = {
view : function (state, props ) {
state.div = mag.module ("magjsappMountNode" ,magjsdataNode);
}
}
mag.module ("magjsapp" ,magjsapp);
window .MagJSclear = function ( ) {
Mag JSData.splice (0 );
};
window .MagJSpush = function (data ) {
Mag JSData.push (data);
};
window .MagJSforceRedraw = function (data ) {
mag.redraw (true );
}
Mag JSclear();
});
</script >
Setup JS
Teardown JS
Test cases
Test #1 Title *
Async
Code * ANGclear ();
for (var i = 0 ; i < 1000 ; i++) {
ANGpush ("nitem" + getId (i));
}
Test #2 Title *
Async
Code * KOclear ();
for (var i = 0 ; i < 1000 ; i++)
KOpush ("kitem" + getId (i));
Title *
Async
Code * RClear ();
for (var i = 0 ; i < 1000 ; i++)
RPush ("ritem" + getId (i));
window .reactComp .setState ({
data : window .reactComp .state .data
});
Title *
Async
Code * Mclear ();
for (var i = 0 ; i < 1000 ; i++)
Mpush ("mitem" + getId (i));
Title *
Async
Code * VueClear ();
for (var i = 0 ; i < 1000 ; i++)
VuePush ("vitem" + getId (i));
Title *
Async
Code * EMclear ();
for (var i = 0 ; i < 1000 ; i++)
EMpush ("eitem" + getId (i));
Title *
Async
Code * jqClear ();
for (var i = 0 ; i < 1000 ; i++) {
jqPush ('jq-item' + getId (i));
}
Title *
Async
Code * Mag JSclear();
for (var i = 0 ; i < 1000 ; i++) {
Mag JSpush("mjsit" + getId (i));
}
Mag JSforceRedraw();