| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>Vue benchmark</title>
- </head>
- <body>
- <script src="https://cdn.jsdelivr.net/lodash/4.10.0/lodash.min.js"></script>
- <script src="../../dist/vue.min.js"></script>
- <style>
- .danger {
- background-color: red;
- }
- </style>
- <script type="text/x-template" id="t">
- <div>
- <h1>{{ items.length }} Components</h1>
- <p>{{ action }} took {{time}}ms.</p>
- <button @click="shuffle">shuffle</button>
- <button @click="add">add</button>
- <table class="table table-hover table-striped test-data">
- <row v-for="item in items" :key="item.id"
- :class="{ danger: item.id === selected }"
- :item="item"
- @select="select(item)"
- @remove="remove(item)">
- </row>
- </table>
- </div>
- </script>
- <script type="text/x-template" id="row">
- <tr>
- <td class="col-md-1">{{item.id}}</td>
- <td class="col-md-4">
- <a @click="$emit('select')">{{item.label}}</a>
- </td>
- <td class="col-md-1">
- <button @click="$emit('remove')">remove</button>
- </td>
- </tr>
- </script>
- <div id="el">
- </div>
- <script>
- var total = 1000
- var items = []
- for (var i = 0; i < total; i++) {
- items.push({
- id: i,
- label: String(Math.random()).slice(0, 5)
- })
- }
- var s = window.performance.now()
- console.profile('render')
- var vm = new Vue({
- el: '#el',
- template: '#t',
- data: {
- total: total,
- time: 0,
- action: 'Render',
- items: items,
- selected: null
- },
- methods: {
- shuffle: monitor('shuffle', function () {
- this.items = _.shuffle(this.items)
- }),
- add: monitor('add', function () {
- this.items.push({
- id: total++,
- label: String(Math.random()).slice(0, 5)
- })
- }),
- select: monitor('select', function (item) {
- this.selected = item.id
- }),
- remove: monitor('remove', function (item) {
- this.items.splice(this.items.indexOf(item), 1)
- })
- },
- components: {
- row: {
- props: ['item'],
- template: '#row'
- }
- }
- })
- setTimeout(function () {
- vm.time = window.performance.now() - s
- console.profileEnd('render')
- }, 0)
- function monitor (action, fn) {
- return function () {
- var s = window.performance.now()
- fn.apply(this, arguments)
- Vue.nextTick(function () {
- vm.action = action
- vm.time = window.performance.now() - s
- })
- }
- }
- </script>
- </body>
- </html>
|