backbone.listenablemodel
Version:
Composite model for Backbone.js
90 lines (62 loc) • 2.42 kB
text/coffeescript
Backbone = require 'backbone'
Backbone.ListenableModel = require '../lib/Backbone.ListenableModel'
Benchtable = require 'benchtable'
nestedInput = {}
for i in [0...20]
nestedInput[i] = new Backbone.Model
runSuite = (suite) ->
suite.on 'cycle', (event) ->
console.log String(event.target)
suite.on 'complete', (event) ->
console.log 'Fastest is ' + this.filter('fastest').pluck('name')
console.log this.table.toString()
suite.run()
do ->
suite = new Benchtable
suite.addFunction 'ListenableModel', (attr) ->
new Backbone.ListenableModel attr
suite.addFunction 'Model', (attr) ->
new Backbone.Model attr
suite.addInput 'Empty attr', {}
suite.addInput 'Simple attr', {'hello': 'world', 1: 3.14}
suite.addInput 'Complicated attr', nestedInput
runSuite suite
do ->
suite = new Benchtable
listenable = new Backbone.ListenableModel
vanilla = new Backbone.Model
suite.addFunction 'ListenableModel#set', (attr) ->
listenable.set attr
suite.addFunction 'Model#set', (attr) ->
vanilla.set attr
suite.addInput 'Empty attr', {}
suite.addInput 'Simple attr', {'hello': 'world', 1: 3.14}
suite.addInput 'Complicated attr', nestedInput
runSuite suite
do ->
suite = new Benchtable
listenable = new Backbone.ListenableModel nestedInput
inner = listenable.get 0
vanilla = new Backbone.Model nestedInput
suite.addFunction 'ListenableModel#trigger', (evt) ->
listenable.trigger evt, {}
suite.addFunction 'ListenableModel#trigger on inner', (evt) ->
inner.trigger evt, {}
suite.addFunction 'Model#trigger', (evt) ->
vanilla.trigger evt, {}
suite.addInput 'trigger change', ['change']
suite.addInput 'trigger change:someAttribute', ['change:attr']
runSuite suite
do ->
suite = new Benchtable
listenable = new Backbone.ListenableModel nestedInput
smallListenable = new Backbone.ListenableModel {1:3.14, 'hello': 'world', 'more': false}
vanilla = new Backbone.Model nestedInput
smallVanilla = new Backbone.ListenableModel {1:3.14, 'hello': 'world', 'more': false}
suite.addFunction 'ListenableModel#clear', (model) ->
model.clear()
suite.addInput 'Large ListenableModel', [listenable]
suite.addInput 'Small ListenableModel', [smallListenable]
suite.addInput 'Large Backbone.Model', [vanilla]
suite.addInput 'Small Backbone.Model', [smallVanilla]
runSuite suite