Angular VS Knockout VS Ember VS React VS Mithril VS VueJS
JavaScript performance comparison
Preparation code
<!-- Jquery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.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.0-beta.1/ember.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.10.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mithril/0.1.12/mithril.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/0.11.10/vue.min.js"></script>
<!-- Angular -->
<div ng-app>
Angular:
<span ng-controller="Ctrl" id="angList"><span ng-repeat="item in data">{{item}}</span></span>
</div>
<!-- Knockout -->
<div id="koapp">
Knockout:
<span data-bind="foreach: data"><span data-bind="text: $data"></span></span>
</div>
<!-- Ember -->
<div id="emapp"></div>
<script type="text/x-handlebars">
Ember:
<span>
{{#each EMapp.data}}<span>{{this}}</span>{{/each}}
</span>
</script>
<!-- React -->
<div id="react">
React: <span id="reactMountNode"></span>
</div>
<!-- Mithril -->
<div id="mithrilapp">
Mithril: <span id="mithrilMountNode"></span>
</div>
<!-- Vuejs -->
<div id="vuejs">
Vuejs: <span id="vuejsMountNode"><span v-repeat="item: data" v-text="item"></span></span>
</div>
<script>
var Ctrl = function($scope){ $scope.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.DOM.span(null,
this.state.data.map(function(result) {
return React.DOM.span( {key:result.id}, result.text);
})
)
);
}
});
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() {
angular.element(document).ready(function() {
var ang_scope = $('#angList').scope();
window.ANGclear = function(){
ang_scope.data = [];
ang_scope.$apply();
};
window.ANGpush = function(data){
ang_scope.data.push(data);
ang_scope.$apply();
};
});
ko.applyBindings(KOviewmodel, document.getElementById('koapp'));
window.KOclear = function (){
KOData.splice(0, KOData().length);
};
window.KOpush = function (data){
KOData.push(data);
};
EMapp = Ember.Application.create({
rootElement: '#emapp'
});
EMapp.data = Ember.A();
window.EMclear = function () {
EMapp.data.clear();
};
window.EMpush = function (data) {
EMapp.data.pushObject(data);
};
var reactComp = ReactComponent();
React.renderComponent(reactComp, $('#reactMountNode')[0]);
window.RClear = function() {
reactComp.setState({data: []})
};
window.RPush = function(data) {
var stateData = reactComp.state.data;
stateData.push(data);
reactComp.setState({data: stateData});
}
m.module(document.getElementById("mithrilMountNode"), mithapp);
window.Mclear = function() {
m.startComputation();
MithrilData.splice(0);
m.endComputation();
};
window.Mpush = function(data) {
m.startComputation();
MithrilData.push(data);
m.endComputation();
}
var vueInstance = new Vue({
el: '#vuejsMountNode',
data: {
data: []
}
});
window.VueClear = function(){
vueInstance.$set('data', []);
};
window.VuePush = function(data){
vueInstance.data.push(data);
};
});
</script>
Preparation code output
<!-- Jquery -->
<!-- Angular -->
<div ng-app>
Angular:
<span ng-controller="Ctrl" id="angList"><span ng-repeat="item in data">{{item}}</span></span>
</div>
<!-- Knockout -->
<div id="koapp">
Knockout:
<span data-bind="foreach: data"><span data-bind="text: $data"></span></span>
</div>
<!-- Ember -->
<div id="emapp"></div>
<!-- React -->
<div id="react">
React: <span id="reactMountNode"></span>
</div>
<!-- Mithril -->
<div id="mithrilapp">
Mithril: <span id="mithrilMountNode"></span>
</div>
<!-- Vuejs -->
<div id="vuejs">
Vuejs: <span id="vuejsMountNode"><span v-repeat="item: data" v-text="item"></span></span>
</div>
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
Test | Ops/sec | |
---|---|---|
Angular 10
|
|
pending… |
Knockout 10
|
|
pending… |
Ember 10
|
|
pending… |
Angular 100
|
|
pending… |
Knockout 100
|
|
pending… |
Ember 100
|
|
pending… |
React 10
|
|
pending… |
React 100
|
|
pending… |
Mithril 10
|
|
pending… |
Mithril 100
|
|
pending… |
Vuejs 100
|
|
pending… |
Vuejs 10
|
|
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.
- Revision 1: published Matt Peterson
- Revision 2: published
- Revision 10: published dain
- Revision 11: published
- Revision 13: published
- Revision 14: published
- Revision 18: published
- Revision 20: published Bevan Hunt
- Revision 21: published
- Revision 22: published
- Revision 24: published
- Revision 25: published Jacob
- Revision 30: published
- Revision 32: published Steve Commisso
- Revision 33: published Steve Commisso
- Revision 35: published
- Revision 36: published
- Revision 37: published Lennaert Meijvogel
- Revision 38: published
- Revision 39: published
- Revision 40: published
- Revision 41: published
- Revision 42: published
- Revision 43: published
- Revision 44: published
- Revision 46: published
- Revision 48: published
- Revision 49: published
- Revision 50: published
- Revision 51: published
- Revision 52: published Jose S.
- Revision 53: published Jose S.
- Revision 54: published
- Revision 56: published
- Revision 57: published
- Revision 58: published kmdsbng
- Revision 59: published kmdsbng
- Revision 60: published hakurai
- Revision 61: published Jose S.
- Revision 62: published
- Revision 63: published
- Revision 64: published
- Revision 68: published
- Revision 69: published
- Revision 70: published
- Revision 73: published
- Revision 74: published
- Revision 75: published
- Revision 76: published
- Revision 77: published
- Revision 78: published
- Revision 79: published
- Revision 80: published
- Revision 81: published
- Revision 82: published
- Revision 83: published
- Revision 84: published bieber
- Revision 85: published
- Revision 87: published
- Revision 88: published cihan
- Revision 89: published
- Revision 90: published
- Revision 91: published
- Revision 92: published
- Revision 93: published
- Revision 94: published SurelyPlus and last updated
- Revision 95: published
- Revision 96: published
- Revision 97: published
- Revision 98: published Matt Webb
- Revision 99: published balazsbela
- Revision 100: published thelinuxlich
- Revision 103: published
- Revision 104: published Roman
- Revision 105: published
- Revision 106: published
- Revision 107: published
- Revision 108: published m_gol
- Revision 109: published
- Revision 110: published
- Revision 111: published
- Revision 114: published
- Revision 115: published
- Revision 116: published Sebastian
- Revision 117: published Sebastian
- Revision 118: published
- Revision 119: published
- Revision 120: published
- Revision 122: published
- Revision 123: published Joe Wagner
- Revision 124: published Dave
- Revision 125: published
- Revision 126: published
- Revision 129: published
- Revision 132: published
- Revision 133: published
- Revision 134: published
- Revision 135: published
- Revision 136: published
- Revision 137: published
- Revision 138: published
- Revision 140: published
- Revision 141: published
- Revision 142: published
- Revision 143: published
- Revision 144: published
- Revision 147: published
- Revision 148: published
- Revision 149: published
- Revision 150: published
- Revision 151: published
- Revision 152: published
- Revision 154: published
- Revision 156: published
- Revision 157: published
- Revision 158: published
- Revision 159: published
- Revision 160: published
- Revision 161: published
- Revision 162: published
- Revision 164: published
- Revision 165: published
- Revision 166: published Kris Selden
- Revision 171: published
- Revision 172: published
- Revision 173: published
- Revision 174: published
- Revision 175: published Andy Kant
- Revision 176: published
- Revision 178: published
- Revision 179: published
- Revision 180: published
- Revision 181: published
- Revision 182: published
- Revision 183: published Tim Mironov
- Revision 185: published
- Revision 186: published Justan
- Revision 188: published
- Revision 189: published
- Revision 190: published Fontaine
- Revision 191: published Fontaine
- Revision 193: published
- Revision 194: published
- Revision 195: published
- Revision 197: published
- Revision 199: published Rob
- Revision 201: published Domo
- Revision 202: published
- Revision 203: published
- Revision 204: published
- Revision 205: published QaDeS
- Revision 206: published
- Revision 207: published Rene van den Berg
- Revision 208: published
- Revision 209: published
- Revision 210: published
- Revision 211: published
- Revision 212: published
- Revision 213: published
- Revision 214: published
- Revision 215: published
- Revision 216: published
- Revision 217: published
- Revision 218: published
- Revision 219: published
- Revision 220: published
- Revision 221: published
- Revision 223: published
- Revision 226: published
- Revision 227: published
- Revision 228: published
- Revision 229: published
- Revision 230: published
- Revision 231: published
- Revision 233: published
- Revision 234: published
- Revision 235: published
- Revision 236: published
- Revision 237: published
- Revision 238: published
- Revision 239: published
- Revision 240: published
- Revision 241: published
- Revision 242: published
- Revision 243: published
- Revision 244: published
- Revision 246: published wes
- Revision 247: published wes
- Revision 248: published Tim Mironov
- Revision 249: published Tim Mironov
- Revision 250: published Andreas
- Revision 251: published Andreas
- Revision 252: published Andreas
- Revision 253: published Andreas
- Revision 254: published Andreas
- Revision 256: published Nik Voss
- Revision 257: published elennaro
- Revision 258: published
- Revision 259: published surtich
- Revision 260: published surtich
- Revision 261: published surtich
- Revision 262: published
- Revision 264: published
- Revision 265: published iorlas
- Revision 267: published
- Revision 268: published
- Revision 270: published
- Revision 271: published
- Revision 272: published Vyacheslav Shebanov
- Revision 273: published
- Revision 274: published
- Revision 275: published
- Revision 276: published
- Revision 277: published
- Revision 278: published
- Revision 279: published
- Revision 280: published
- Revision 281: published
- Revision 284: published
- Revision 285: published
- Revision 286: published Alex Art
- Revision 287: published
- Revision 288: published
- Revision 289: published
- Revision 290: published
- Revision 291: published
- Revision 292: published Timothy Farrell
- Revision 293: published testKeys
- Revision 294: published Simon
- Revision 295: published Chris Rhoden
- Revision 296: published Chris Rhoden
- Revision 297: published
- Revision 299: published Curtis Cummings
- Revision 300: published
- Revision 302: published Edgaras
- Revision 303: published
- Revision 304: published
- Revision 305: published Stephen Demjanenko
- Revision 306: published Stephen Demjanenko
- Revision 308: published Timothy Farrell
- Revision 309: published and last updated
- Revision 310: published
- Revision 311: published
- Revision 312: published Curtis Cummings
- Revision 313: published
- Revision 314: published
- Revision 315: published
- Revision 316: published
- Revision 319: published
- Revision 322: published
- Revision 323: published
- Revision 324: published Andrey
- Revision 325: published
- Revision 326: published
- Revision 327: published vineeth
- Revision 328: published chris
- Revision 329: published
- Revision 330: published
- Revision 331: published
- Revision 333: published
- Revision 334: published
- Revision 336: published and last updated
- Revision 337: published
- Revision 338: published
- Revision 339: published
- Revision 340: published
- Revision 341: published
- Revision 342: published
- Revision 343: published
- Revision 344: published
- Revision 345: published
- Revision 346: published
- Revision 347: published
- Revision 348: published
- Revision 350: published
- Revision 351: published
- Revision 352: published Tim Mironov
- Revision 353: published
- Revision 354: published
- Revision 355: published
- Revision 356: published
- Revision 357: published
- Revision 358: published
- Revision 359: published
- Revision 360: published
- Revision 361: published
- Revision 364: published
- Revision 365: published Juliano Nunes
- Revision 366: published
- Revision 367: published Michael L.
- Revision 381: published
- Revision 387: published altanochir
- Revision 388: published
- Revision 389: published
- Revision 390: published
- Revision 395: published
- Revision 396: published
- Revision 400: published Brad
- Revision 401: published
- Revision 402: published DontShootMe
- Revision 409: published Charles
- Revision 411: published Charles
- Revision 413: published
- Revision 414: published Kaleb
- Revision 416: published Added framework versions; 10/100 iterations; organized code
- Revision 417: published Mark
- Revision 422: published
- Revision 423: published altanochir
- Revision 424: published MadDocNC Ractive with .set .get
- Revision 425: published
- Revision 426: published
- Revision 427: published
- Revision 428: published
- Revision 429: published
- Revision 430: published
- Revision 431: published
- Revision 433: published angluarDomElements
- Revision 435: published
- Revision 436: published and last updated
- Revision 438: published Laurent
- Revision 439: published
- Revision 441: published Laurent
- Revision 442: published Ben
- Revision 443: published Loler
- Revision 444: published opus131
- Revision 446: published
- Revision 448: published
- Revision 449: published Neil
- Revision 450: published
- Revision 451: published
- Revision 452: published
- Revision 453: published
- Revision 454: published
- Revision 455: published
- Revision 456: published
- Revision 457: published T.est
- Revision 458: published
- Revision 459: published Adam
- Revision 460: published
- Revision 461: published Kenny
- Revision 463: published
- Revision 464: published
- Revision 465: published
- Revision 467: published
- Revision 468: published
- Revision 470: published
- Revision 471: published
- Revision 472: published jasonpvp
- Revision 473: published caitlin
- Revision 475: published Stefan
- Revision 476: published Stefan
- Revision 478: published caitlin
- Revision 479: published
- Revision 480: published Developer
- Revision 481: published Loe
- Revision 482: published
- Revision 483: published
- Revision 484: published
- Revision 485: published
- Revision 486: published
- Revision 487: published AngularRules
- Revision 488: published AngularRules
- Revision 489: published
- Revision 490: published
- Revision 491: published
- Revision 492: published
- Revision 493: published
- Revision 494: published
- Revision 495: published
- Revision 496: published
- Revision 497: published
- Revision 498: published Martín Acosta
- Revision 499: published
- Revision 500: published
- Revision 501: published
- Revision 503: published
- Revision 506: published
- Revision 507: published
- Revision 509: published
- Revision 510: published
- Revision 511: published
- Revision 512: published
- Revision 513: published
- Revision 516: published bla
- Revision 517: published Mike
- Revision 518: published
- Revision 519: published
- Revision 520: published
- Revision 521: published
- Revision 522: published
- Revision 523: published
- Revision 525: published
- Revision 526: published
- Revision 527: published
- Revision 530: published
- Revision 531: published Brian Milton
- Revision 532: published cybermage
- Revision 533: published RJ
- Revision 534: published bogdan
- Revision 535: published
- Revision 536: published
- Revision 537: published
- Revision 538: published
- Revision 539: published fengyie007
- Revision 540: published
- Revision 542: published Alex Mathews
- Revision 543: published dstream
- Revision 545: published
- Revision 546: published
- Revision 547: published Prateek Khurana
- Revision 548: published mleh
- Revision 549: published mleh
- Revision 550: published xorgy
- Revision 551: published
- Revision 552: published
- Revision 553: published
- Revision 554: published
- Revision 555: published
- Revision 556: published Leonid Frolov
- Revision 557: published
- Revision 558: published
- Revision 559: published
- Revision 560: published
- Revision 561: published
- Revision 562: published
- Revision 563: published
- Revision 564: published
- Revision 567: published
- Revision 568: published
- Revision 569: published
- Revision 571: published
- Revision 572: published
- Revision 573: published
- Revision 574: published Rahul
- Revision 577: published zox
- Revision 578: published
- Revision 579: published
- Revision 580: published brad
- Revision 581: published
- Revision 582: published
- Revision 583: published
- Revision 584: published
- Revision 586: published
- Revision 587: published
- Revision 588: published PhiLho
- Revision 589: published Andrey
- Revision 590: published PhiLho
- Revision 591: published
- Revision 592: published
- Revision 594: published
- Revision 595: published
- Revision 596: published
- Revision 597: published
- Revision 598: published evan
- Revision 599: published
- Revision 600: published phil
- Revision 601: published Hello
- Revision 603: published joss
- Revision 604: published
- Revision 605: published
- Revision 606: published
- Revision 607: published
- Revision 608: published
- Revision 609: published
- Revision 610: published
- Revision 611: published Eike Thies
- Revision 612: published Eike Thies
- Revision 613: published
- Revision 614: published
- Revision 615: published
- Revision 616: published
- Revision 617: published
- Revision 618: published Prathap Reddy
- Revision 619: published Eike Thies
- Revision 620: published
- Revision 621: published
- Revision 622: published Tim Mensch
- Revision 624: published Tim Mensch
- Revision 627: published Tim Mensch
- Revision 628: published evan
- Revision 629: published Eike Thies
- Revision 630: published
- Revision 631: published
- Revision 632: published
- Revision 634: published Eike Thies
- Revision 635: published
- Revision 636: published Test
- Revision 637: published Eike Thies
- Revision 639: published
- Revision 640: published Eike Thies
- Revision 641: published
- Revision 642: published Eike Thies
- Revision 643: published Daniel
- Revision 646: published
- Revision 647: published Craig B
- Revision 648: published
- Revision 650: published
- Revision 651: published
- Revision 652: published
- Revision 653: published Eike Thies
- Revision 654: published Eike Thies
- Revision 655: published Daniel
- Revision 656: published
- Revision 657: published
- Revision 658: published
- Revision 659: published Daniel
- Revision 660: published
- Revision 661: published
- Revision 662: published Andrey Gubanov
- Revision 663: published Andrey Gubanov
- Revision 664: published Andrey Gubanov
- Revision 666: published Dylan
- Revision 667: published Andrey Gubanov
- Revision 668: published
- Revision 669: published
- Revision 672: published Fredrik Borgström
- Revision 673: published Matt Richards
- Revision 674: published
- Revision 675: published taheta
- Revision 676: published taheta
- Revision 677: published taheta
- Revision 678: published
- Revision 679: published
- Revision 681: published victor
- Revision 682: published Guest watcher!
- Revision 687: published
- Revision 690: published Guest watcher!
- Revision 695: published
- Revision 700: published
- Revision 701: published
- Revision 702: published anerth
- Revision 703: published Nir Elbaz
- Revision 704: published Brandon Myers
- Revision 705: published
- Revision 706: published
- Revision 707: published
- Revision 710: published Guest watcher!
- Revision 712: published
- Revision 714: published Guest watcher!
- Revision 717: published Guest watcher!
- Revision 719: published
- Revision 720: published
- Revision 724: published
- Revision 725: published
- Revision 726: published
- Revision 727: published
- Revision 728: published James Roland Cabresos
- Revision 729: published James Roland Cabresos
- Revision 730: published James Roland Cabresos
- Revision 731: published James Roland Cabresos
- Revision 732: published James Roland Cabresos
- Revision 733: published James Roland Cabresos
- Revision 734: published James Roland Cabresos
- Revision 735: published James Roland Cabresos
- Revision 736: published James Roland Cabresos
- Revision 738: published
- Revision 739: published
- Revision 740: published Jelena
- Revision 741: published
- Revision 747: published
- Revision 748: published
- Revision 749: published
- Revision 750: published
- Revision 751: published Marcin N
- Revision 752: published Marcin N
- Revision 753: published Marcin N
- Revision 755: published
- Revision 756: published
- Revision 758: published and last updated
- Revision 759: published
- Revision 760: published Davy Vanherbergen
- Revision 761: published
- Revision 766: published
- Revision 767: published
- Revision 768: published
- Revision 769: published
- Revision 770: published
- Revision 771: published
- Revision 772: published
- Revision 774: published
- Revision 777: published Yev
- Revision 778: published Trygve
- Revision 779: published
- Revision 781: published
- Revision 782: published Daniel
- Revision 783: published Daniel
- Revision 784: published Denis
- Revision 785: published
- Revision 786: published Lance
- Revision 787: published xzs
- Revision 788: published
- Revision 790: published
- Revision 791: published
- Revision 792: published
- Revision 793: published
- Revision 794: published
- Revision 795: published abernh
- Revision 796: published
- Revision 797: published
- Revision 798: published
- Revision 799: published
- Revision 800: published
- Revision 801: published
- Revision 802: published
- Revision 803: published gospon.mintz
- Revision 805: published
- Revision 806: published Sidney
- Revision 807: published Sidney
- Revision 808: published
- Revision 809: published Eugene
- Revision 810: published Eugene
- Revision 811: published Eugene
- Revision 813: published
- Revision 814: published
- Revision 815: published
- Revision 817: published
- Revision 819: published Jinguan
- Revision 820: published Jinguan
- Revision 822: published
- Revision 823: published
- Revision 824: published
- Revision 826: published
- Revision 828: published
- Revision 829: published
- Revision 830: published
- Revision 831: published
- Revision 832: published
- Revision 834: published test
- Revision 835: published test
- Revision 836: published test
- Revision 838: published test
- Revision 839: published
- Revision 840: published
- Revision 841: published Alberto Martínez
- Revision 842: published Kenneth
- Revision 843: published Kenneth
- Revision 844: published
- Revision 845: published
- Revision 846: published
- Revision 847: published tes
- Revision 848: published
- Revision 849: published
- Revision 850: published
- Revision 851: published Guest watcher!
- Revision 852: published Guest watcher!
- Revision 853: published Johannes
- Revision 856: published
- Revision 857: published
- Revision 858: published
- Revision 859: published
- Revision 860: published
- Revision 861: published
- Revision 863: published Stan Omoregie
0 Comments