| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- console.log('\nObserver\n')
- var done = null
- var Observer = require('../src/observe/observer')
- var Emitter = require('../src/emitter')
- var OldObserver = require('../../vue/src/observer')
- var sideEffect = true
- var runs = 1000
- function cb () {
- sideEffect = !sideEffect
- }
- function now () {
- return window.performence
- ? window.performence.now()
- : Date.now()
- }
- var queue = []
- function bench (desc, fac, run) {
- queue.push(function () {
- var objs = []
- for (var i = 0; i < runs; i++) {
- objs.push(fac(i))
- }
- var s = now()
- for (var i = 0; i < runs; i++) {
- run(objs[i])
- }
- var passed = now() - s
- console.log(desc + ' - ' + (16 / (passed / runs)).toFixed(2) + ' ops/frame')
- })
- }
- function run () {
- queue.shift()()
- if (queue.length) {
- setTimeout(run, 0)
- } else {
- done && done()
- }
- }
- bench(
- 'observe (simple object) ',
- function (i) {
- return {a:i}
- },
- function (o) {
- new Observer().observe('', o)
- }
- )
- bench(
- 'observe (simple object) old ',
- function (i) {
- return {a:i}
- },
- function (o) {
- OldObserver.observe(o, '', new Emitter())
- }
- )
- bench(
- 'observe (3 nested objects) ',
- function (i) {
- return {a:{b:{c:i}}}
- },
- function (o) {
- new Observer().observe('', o)
- }
- )
- bench(
- 'observe (3 nested objects) old ',
- function (i) {
- return {a:{b:{c:i}}}
- },
- function (o) {
- OldObserver.observe(o, '', new Emitter())
- }
- )
- bench(
- 'observe (array, 3 objects) ',
- function (i) {
- return [{a:i}, {a:i+1}, {a:i+2}]
- },
- function (o) {
- new Observer().observe('', o)
- }
- )
- bench(
- 'observe (array, 3 objects) old ',
- function (i) {
- return [{a:i}, {a:i+1}, {a:i+2}]
- },
- function (o) {
- OldObserver.observe(o, '', new Emitter())
- }
- )
- bench(
- 'observe (array, 30 objects) ',
- function () {
- var a = [], i = 30
- while (i--) {
- a.push({a:i})
- }
- return a
- },
- function (o) {
- new Observer().observe('', o)
- }
- )
- bench(
- 'observe (array, 30 objects) old',
- function () {
- var a = [], i = 30
- while (i--) {
- a.push({a:i})
- }
- return a
- },
- function (o) {
- OldObserver.observe(o, '', new Emitter())
- }
- )
- Observer.emitGet = true
- OldObserver.shouldGet = true
- bench(
- 'simple get ',
- function () {
- var a = {a:1}
- var ob = new Observer()
- ob.observe('', a)
- ob.on('get', cb)
- return a
- },
- function (o) {
- var v = o.a
- }
- )
- bench(
- 'simple get old',
- function () {
- var a = {a:1}
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('get', cb)
- return a
- },
- function (o) {
- var v = o.a
- }
- )
- bench(
- 'nested get ',
- function () {
- var a = {a:{b:{c:1}}}
- var ob = new Observer()
- ob.observe('', a)
- ob.on('get', cb)
- return a
- },
- function (o) {
- var v = o.a.b.c
- }
- )
- bench(
- 'nested get old',
- function () {
- var a = {a:{b:{c:1}}}
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('get', cb)
- return a
- },
- function (o) {
- var v = o.a.b.c
- }
- )
- Observer.emitGet = false
- OldObserver.shouldGet = false
- bench(
- 'simple set ',
- function () {
- var a = {a:1}
- var ob = new Observer()
- ob.observe('', a)
- ob.on('set', cb)
- return a
- },
- function (o) {
- o.a = 12345
- }
- )
- bench(
- 'simple set old',
- function () {
- var a = {a:1}
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('set', cb)
- return a
- },
- function (o) {
- o.a = 12345
- }
- )
- bench(
- 'nested set ',
- function () {
- var a = {a:{b:{c:1}}}
- var ob = new Observer()
- ob.observe('', a)
- ob.on('set', cb)
- return a
- },
- function (o) {
- o.a.b.c = 2
- }
- )
- bench(
- 'nested set old',
- function () {
- var a = {a:{b:{c:1}}}
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('set', cb)
- return a
- },
- function (o) {
- o.a.b.c = 2
- }
- )
- bench(
- 'swap set ',
- function () {
- var a = {a:{b:{c:1}}}
- var ob = new Observer()
- ob.observe('', a)
- ob.on('set', cb)
- return a
- },
- function (o) {
- o.a = {b:{c:2}}
- }
- )
- bench(
- 'swap set old ',
- function () {
- var a = {a:{b:{c:1}}}
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('set', cb)
- return a
- },
- function (o) {
- o.a = {b:{c:2}}
- }
- )
- bench(
- 'array push ',
- function () {
- var a = []
- var ob = new Observer()
- ob.observe('', a)
- ob.on('mutation', cb)
- return a
- },
- function (o) {
- o.push({a:1})
- }
- )
- bench(
- 'array push old',
- function () {
- var a = []
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('mutation', cb)
- return a
- },
- function (o) {
- o.push({a:1})
- }
- )
- bench(
- 'array reverse (5 objects) ',
- function () {
- var a = [], i = 5
- while (i--) {
- a.push({a:i})
- }
- var ob = new Observer()
- ob.observe('', a)
- ob.on('mutation', cb)
- return a
- },
- function (o) {
- o.reverse()
- }
- )
- bench(
- 'array reverse (5 objects) old ',
- function () {
- var a = [], i = 5
- while (i--) {
- a.push({a:i})
- }
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('mutation', cb)
- return a
- },
- function (o) {
- o.reverse()
- }
- )
- bench(
- 'array reverse (50 objects) ',
- function () {
- var a = [], i = 50
- while (i--) {
- a.push({a:i})
- }
- var ob = new Observer()
- ob.observe('', a)
- ob.on('mutation', cb)
- return a
- },
- function (o) {
- o.reverse()
- }
- )
- bench(
- 'array reverse (50 objects) old',
- function () {
- var a = [], i = 50
- while (i--) {
- a.push({a:i})
- }
- var ob = new Emitter()
- OldObserver.observe(a, '', ob)
- ob.on('mutation', cb)
- return a
- },
- function (o) {
- o.reverse()
- }
- )
- exports.run = function (cb) {
- done = cb
- run()
- }
|