1+ var sf = require ( 'scarletsframe' ) ;
2+ var $ = sf . dom ;
3+
4+ // Declare variable for the model
5+ sf . model . for ( 'bench-mark' , function ( self ) {
6+ self . list = [ ] ;
7+ self . selected = - 1 ;
8+ } ) ;
9+
10+ // Declare functions that controlling the model
11+ sf . controller . run ( 'bench-mark' , function ( self , root ) {
12+ var Measurer = root ( 'measurer' ) ;
13+
14+ var adjectives = [ "pretty" , "large" , "big" , "small" , "tall" , "short" , "long" , "handsome" , "plain" , "quaint" , "clean" , "elegant" , "easy" , "angry" , "crazy" , "helpful" , "mushy" , "odd" , "unsightly" , "adorable" , "important" , "inexpensive" , "cheap" , "expensive" , "fancy" ] ;
15+ var colours = [ "red" , "yellow" , "blue" , "green" , "pink" , "brown" , "purple" , "brown" , "white" , "black" , "orange" ] ;
16+ var nouns = [ "table" , "chair" , "house" , "bbq" , "desk" , "car" , "pony" , "cookie" , "sandwich" , "burger" , "pizza" , "mouse" , "keyboard" ] ;
17+
18+ var nextId = 1 ;
19+
20+ function _random ( max ) {
21+ return Math . round ( Math . random ( ) * 1000 ) % max ;
22+ }
23+
24+ self . buildData = function ( count = 1000 ) {
25+ var data = [ ] ;
26+ for ( var i = 0 ; i < count ; i ++ )
27+ data . push ( {
28+ id : nextId ++ ,
29+ status :'' ,
30+ label : adjectives [ _random ( adjectives . length ) ] + " " + colours [ _random ( colours . length ) ] + " " + nouns [ _random ( nouns . length ) ]
31+ } ) ;
32+
33+ return data ;
34+ }
35+
36+ self . unselect = function ( ) {
37+ if ( self . selected === - 1 ) return ;
38+
39+ if ( self . list [ self . selected ] !== undefined ) {
40+ self . list [ self . selected ] . status = '' ;
41+ self . list . softRefresh ( self . selected ) ;
42+ }
43+
44+ self . selected = - 1 ;
45+ }
46+
47+ // Handle button
48+ self . b_run = function ( ) {
49+ Measurer . start ( "run" ) ;
50+ self . list = self . buildData ( ) ;
51+ self . selected = - 1 ;
52+ Measurer . stop ( ) ;
53+ }
54+
55+ self . b_runlots = function ( ) {
56+ Measurer . start ( "runLots" ) ;
57+ self . list = self . buildData ( 10000 ) ;
58+ self . selected = - 1 ;
59+ Measurer . stop ( ) ;
60+ }
61+
62+ self . b_add = function ( ) {
63+ Measurer . start ( "add" ) ;
64+ self . list = self . list . concat ( self . buildData ( 1000 ) ) ;
65+ Measurer . stop ( ) ;
66+ }
67+
68+ self . b_update = function ( ) {
69+ Measurer . start ( "update" ) ;
70+ for ( var i = 0 ; i < self . list . length ; i += 10 ) {
71+ self . list [ i ] . label += ' !!!' ;
72+ self . list . softRefresh ( i ) ;
73+ }
74+ Measurer . stop ( ) ;
75+ }
76+
77+ self . b_clear = function ( ) {
78+ Measurer . start ( "clear" ) ;
79+ self . list . splice ( 0 ) ;
80+ self . selected = - 1 ;
81+ Measurer . stop ( ) ;
82+ }
83+
84+ self . b_swaprows = function ( ) {
85+ Measurer . start ( "swapRows" ) ;
86+
87+ if ( self . list . length > 998 )
88+ self . list . swap ( 1 , 998 ) ;
89+
90+ Measurer . stop ( ) ;
91+ }
92+
93+ self . b_select = function ( el ) {
94+ Measurer . start ( "select" ) ;
95+ self . unselect ( ) ;
96+
97+ var rowIndex = $ . parent ( el , '[sf-bind-list]' ) ;
98+ self . selected = rowIndex = sf . model . index ( rowIndex ) ;
99+
100+ self . list [ rowIndex ] . status = 'danger' ;
101+ self . list . softRefresh ( rowIndex ) ;
102+ Measurer . stop ( ) ;
103+ }
104+
105+ self . b_remove = function ( el ) {
106+ Measurer . start ( "delete" ) ;
107+
108+ var rowIndex = $ . parent ( el , '[sf-bind-list]' ) ;
109+ rowIndex = sf . model . index ( rowIndex ) ;
110+
111+ self . list . splice ( rowIndex , 1 ) ;
112+
113+ if ( rowIndex === self . selected )
114+ self . selected = - 1 ;
115+
116+ Measurer . stop ( ) ;
117+ }
118+ } ) ;
119+
120+ // Declare measure function in different scope
121+ sf . controller . run ( 'measurer' , function ( self ) {
122+ var startTime ;
123+ var lastMeasure ;
124+
125+ self . start = function ( name ) {
126+ startTime = performance . now ( ) ;
127+ lastMeasure = name ;
128+ }
129+ self . stop = function ( ) {
130+ var last = lastMeasure ;
131+ if ( lastMeasure ) {
132+ window . setTimeout ( function ( ) {
133+ lastMeasure = null ;
134+ var stop = performance . now ( ) ;
135+ var duration = 0 ;
136+ console . log ( last + " took " + ( stop - startTime ) ) ;
137+ } , 0 ) ;
138+ }
139+ }
140+ } ) ;
141+
142+ // We're not using dynamic resource loader
143+ sf . loader . off ( ) ;
0 commit comments