Browse Source

add benchmark for todomvc example

Evan You 12 years ago
parent
commit
dc17a4eda8
2 changed files with 62 additions and 0 deletions
  1. 1 0
      examples/todomvc/index.html
  2. 61 0
      examples/todomvc/js/benchmark.js

+ 1 - 0
examples/todomvc/index.html

@@ -89,5 +89,6 @@
         <script src="../../dist/vue.js"></script>
         <script src="js/store.js"></script>
         <script src="js/app.js"></script>
+        <script src="js/benchmark.js"></script>
     </body>
 </html>

+ 61 - 0
examples/todomvc/js/benchmark.js

@@ -0,0 +1,61 @@
+// Benchmark
+// add 100 items
+// toggle them one by one
+// then delete them one by one
+
+// do not run when testing in PhantomJS
+if (navigator.userAgent.indexOf('PhantomJS') === -1) {
+    runBenchmark()
+}
+
+function runBenchmark () {
+    
+    var now = window.performance && window.performance.now
+            ? function () { return window.performance.now(); }
+            : Date.now,
+        beforeRender = now(),
+        render,
+        sync,
+        async
+
+    setTimeout(function () {
+
+        render = now() - beforeRender
+
+        var start = now(),
+            newTodo = '12345'
+
+        for (var i = 0; i < 100; i++) {
+            app.newTodo = newTodo
+            app.addTodo()
+        }
+        setTimeout(toggle, 0)
+
+        function toggle () {
+            var checkboxes = document.querySelectorAll('.toggle')
+            for (var i = 0; i < checkboxes.length; i++) {
+                checkboxes[i].click()
+            }
+            setTimeout(del, 0)
+        }
+
+        function del () {
+            var deleteButtons = document.querySelectorAll('.destroy');
+            for (var i = 0; i < deleteButtons.length; i++) {
+                deleteButtons[i].click()
+            }
+            report()
+        }
+
+        function report () {
+            sync = now() - start
+            setTimeout(function () {
+                async = now() - start
+                console.log('render: ' + render.toFixed(2) + 'ms')
+                console.log('sync:   ' + sync.toFixed(2) + 'ms')
+                console.log('async:  ' + async.toFixed(2) + 'ms')
+            }, 0)   
+        }
+    }, 0)
+
+}