1+ < div ng-app ="parsedExpressionBenchmark " ng-cloak >
2+ < div ng-controller ="DataController ">
3+ < div class ="container-fluid ">
4+ < p >
5+ Tests the execution of $parse()ed expressions. Each test tries to isolate specific expression types. Expressions should (probably) not be constant so they get evaluated per digest.
6+ </ p >
7+
8+ < ul style ="list-style:none ">
9+ < li >
10+ < input type ="radio " ng-model ="expressionType " value ="simpleProperty " id ="simpleProperty ">
11+ < label for ="simpleProperty "> Simple Properties</ label >
12+ </ li >
13+
14+ < li >
15+ < input type ="radio " ng-model ="expressionType " value ="fieldAccess " id ="fieldAccess ">
16+ < label for ="fieldAccess "> Field Accessors</ label >
17+ </ li >
18+
19+ < li >
20+ < input type ="radio " ng-model ="expressionType " value ="fieldIndex " id ="fieldIndex ">
21+ < label for ="fieldIndex "> Field Indexors</ label >
22+ </ li >
23+
24+ < li >
25+ < input type ="radio " ng-model ="expressionType " value ="operators " id ="operators ">
26+ < label for ="operators "> Binary/Unary operators</ label >
27+ </ li >
28+
29+ < li >
30+ < input type ="radio " ng-model ="expressionType " value ="filters " id ="filters ">
31+ < label for ="filters "> Filters</ label >
32+ </ li >
33+
34+ < li >
35+ < input type ="radio " ng-model ="expressionType " value ="functionCalls " id ="functionCalls ">
36+ < label for ="functionCalls "> Function calls</ label >
37+ </ li >
38+
39+ < li >
40+ < input type ="radio " ng-model ="expressionType " value ="objectLiterals " id ="objectLiterals ">
41+ < label for ="objectLiterals "> Object Literals</ label >
42+ </ li >
43+
44+ < li >
45+ < input type ="radio " ng-model ="expressionType " value ="arrayLiterals " id ="arrayLiterals ">
46+ < label for ="arrayLiterals "> Array Literals</ label >
47+ </ li >
48+ </ ul >
49+
50+ <!--
51+ NOTES:
52+ - ensure each tested expression has at least one variable in it to avoid constant expressions
53+ -->
54+
55+ < ul ng-switch ="expressionType ">
56+ < li ng-switch-when ="simpleProperty " ng-repeat ="(rowIdx, row) in data ">
57+ < span bm-pe-watch ="rowIdx "> </ span >
58+ < span bm-pe-watch ="row.index "> </ span >
59+ < span bm-pe-watch ="row.num0 "> </ span >
60+ < span bm-pe-watch ="row.num1 "> </ span >
61+ < span bm-pe-watch ="row.str0 "> </ span >
62+ < span bm-pe-watch ="row.str1 "> </ span >
63+ < span bm-pe-watch ="row.obj "> </ span >
64+ < span bm-pe-watch ="row.obj.obj "> </ span >
65+ < span bm-pe-watch ="row.obj.obj.obj "> </ span >
66+ < span bm-pe-watch ="row.obj.obj.obj.obj "> </ span >
67+ < span bm-pe-watch ="row.obj.obj.obj.obj.obj "> </ span >
68+ < span bm-pe-watch ="row.obj.obj.obj.obj.obj.obj "> </ span >
69+ </ li >
70+
71+ < li ng-switch-when ="fieldAccess " ng-repeat ="(rowIdx, row) in data ">
72+ < span bm-pe-watch ="row .index "> </ span >
73+ < span bm-pe-watch ="row .obj . index "> </ span >
74+ < span bm-pe-watch ="row.obj .index "> </ span >
75+ < span bm-pe-watch ="row .obj .index "> </ span >
76+ < span bm-pe-watch ="row .obj.obj .index "> </ span >
77+ < span bm-pe-watch ="row .obj.obj .obj .index "> </ span >
78+ < span bm-pe-watch ="row .obj .obj .index "> </ span >
79+ < span bm-pe-watch ="row .obj .obj.obj .index "> </ span >
80+ < span bm-pe-watch ="row .obj .obj .obj.index "> </ span >
81+ < span bm-pe-watch ="row .num1 "> </ span >
82+ < span bm-pe-watch ="row. num1 "> </ span >
83+ < span bm-pe-watch ="row . num1 "> </ span >
84+ < span bm-pe-watch ="row . num2 "> </ span >
85+ </ li >
86+
87+ < li ng-switch-when ="fieldIndex " ng-repeat ="(rowIdx, row) in data ">
88+ < span bm-pe-watch ="data[rowIdx] "> </ span >
89+ < span bm-pe-watch ="data[row['index']]['index'] "> </ span >
90+ < span bm-pe-watch ="data[rowIdx]['obj'] "> </ span >
91+ < span bm-pe-watch ="data[rowIdx]['obj']['obj'] "> </ span >
92+ < span bm-pe-watch ="row[row['keys'][0]] "> </ span >
93+ < span bm-pe-watch ="row[row['keys'][1]] "> </ span >
94+ < span bm-pe-watch ="row[row['keys'][2]] "> </ span >
95+ < span bm-pe-watch ="row[row['keys'][3]] "> </ span >
96+ < span bm-pe-watch ="row[row['keys'][4]] "> </ span >
97+ < span bm-pe-watch ="row[row['keys'][5]] "> </ span >
98+ < span bm-pe-watch ="row['str0'] "> </ span >
99+ < span bm-pe-watch ="row['str1'] "> </ span >
100+ </ li >
101+
102+ < li ng-switch-when ="operators " ng-repeat ="(rowIdx, row) in data ">
103+ < span bm-pe-watch ="-rowIdx "> </ span >
104+ < span bm-pe-watch ="rowIdx + 1 "> </ span >
105+ < span bm-pe-watch ="rowIdx - 1 "> </ span >
106+ < span bm-pe-watch ="rowIdx * 2 "> </ span >
107+ < span bm-pe-watch ="rowIdx + -1 "> </ span >
108+ < span bm-pe-watch ="rowIdx - -1 "> </ span >
109+ < span bm-pe-watch ="-rowIdx * 2 + 1 "> </ span >
110+ < span bm-pe-watch ="rowIdx % 2 "> </ span >
111+ < span bm-pe-watch ="rowIdx % 2 === 1 "> </ span >
112+ < span bm-pe-watch ="rowIdx % 2 === 0 "> </ span >
113+ < span bm-pe-watch ="rowIdx / 1 "> </ span >
114+ < span bm-pe-watch ="-rowIdx * 2 * rowIdx + rowIdx / rowIdx + 1 "> </ span >
115+ </ li >
116+
117+ < li ng-switch-when ="filters " ng-repeat ="(rowIdx, row) in data ">
118+ < span bm-pe-watch ="rowIdx | noop "> </ span >
119+ < span bm-pe-watch ="rowIdx | noop | noop "> </ span >
120+ < span bm-pe-watch ="rowIdx | noop | noop | noop "> </ span >
121+ < span bm-pe-watch ="-rowIdx | noop "> </ span >
122+ < span bm-pe-watch ="rowIdx | noop:1 "> </ span >
123+ < span bm-pe-watch ="rowIdx | noop:1 | noop "> </ span >
124+ < span bm-pe-watch ="rowIdx | noop:1 | noop:2 | noop:3 "> </ span >
125+ < span bm-pe-watch ="rowIdx | noop:1:2:3:4:5 "> </ span >
126+ < span bm-pe-watch ="rowIdx | noop:rowIdx "> </ span >
127+ < span bm-pe-watch ="rowIdx | noop:rowIdx:rowIdx:rowIdx "> </ span >
128+ < span bm-pe-watch ="rowIdx | noop | noop:1 | noop "> </ span >
129+ < span bm-pe-watch ="rowIdx | noop | noop:null:undefined:0 "> </ span >
130+ </ li >
131+
132+ < li ng-switch-when ="functionCalls " ng-repeat ="(rowIdx, row) in data ">
133+ < span bm-pe-watch ="func() "> </ span >
134+ < span bm-pe-watch ="func(1) "> </ span >
135+ < span bm-pe-watch ="func(1, 2) "> </ span >
136+ < span bm-pe-watch ="func(1, 2, 3) "> </ span >
137+ < span bm-pe-watch ="func(1, 2, 3, 4) "> </ span >
138+ < span bm-pe-watch ="row.func() "> </ span >
139+ < span bm-pe-watch ="row.func(1) "> </ span >
140+ < span bm-pe-watch ="row.func(1, 2) "> </ span >
141+ < span bm-pe-watch ="row.func(1, 2, 3) "> </ span >
142+ < span bm-pe-watch ="row.func(1, 2, 3, 4) "> </ span >
143+ < span bm-pe-watch ="func(func()) "> </ span >
144+ < span bm-pe-watch ="func(func(), func()) "> </ span >
145+ < span bm-pe-watch ="row.func(row.func()) "> </ span >
146+ < span bm-pe-watch ="row.func(row.func(), row.func()) "> </ span >
147+ </ li >
148+
149+ < li ng-switch-when ="objectLiterals " ng-repeat ="(rowIdx, row) in data ">
150+ < span bm-pe-watch-literal ="{foo: rowIdx} "> </ span >
151+ < span bm-pe-watch-literal ="{foo: row, bar: rowIdx} "> </ span >
152+ < span bm-pe-watch-literal ="{0: row, 1: rowIdx, 2: 3} "> </ span >
153+ < span bm-pe-watch-literal ="{str: 'foo', num: rowIdx, b: true} "> </ span >
154+ < span bm-pe-watch-literal ="{a: {b: {c: {d: e: {f: rowIdx}}}}} "> </ span >
155+ < span bm-pe-watch-literal ="{a: rowIdx, b: 1, c: 2, d: 3, e: 4, f: 5, g: rowIdx, h: 6, i: 7, j: 8, k: rowIdx} "> </ span >
156+ </ li >
157+
158+ < li ng-switch-when ="arrayLiterals " ng-repeat ="(rowIdx, row) in data ">
159+ < span bm-pe-watch-literal ="[rowIdx] "> </ span >
160+ < span bm-pe-watch-literal ="[rowIdx, 0] "> </ span >
161+ < span bm-pe-watch-literal ="[rowIdx, 0, 1] "> </ span >
162+ < span bm-pe-watch-literal ="[rowIdx, 0, 1, 2] "> </ span >
163+ < span bm-pe-watch-literal ="[rowIdx, 0, 1, 2, 3] "> </ span >
164+ < span bm-pe-watch-literal ="[[], [rowIdx], [], [], [3], [[[]]] "> </ span >
165+ < span bm-pe-watch-literal ="[rowIdx, undefined, null, true, false] "> </ span >
166+ < span bm-pe-watch-literal ="[[][0], [0][0], [][rowIdx]] "> </ span >
167+ < span bm-pe-watch-literal ="[0, rowIdx] "> </ span >
168+ < span bm-pe-watch-literal ="[0, 1, rowIdx] "> </ span >
169+ < span bm-pe-watch-literal ="[0, 1, 2, rowIdx] "> </ span >
170+ < span bm-pe-watch-literal ="[0, 1, 2, 3, rowIdx] "> </ span >
171+ </ li >
172+
173+ <!--
174+ <li ng-switch-when="" ng-repeat="(rowIdx, row) in data">
175+ <span bm-pe-watch=""></span>
176+ <span bm-pe-watch=""></span>
177+ <span bm-pe-watch=""></span>
178+ <span bm-pe-watch=""></span>
179+ <span bm-pe-watch=""></span>
180+ <span bm-pe-watch=""></span>
181+ <span bm-pe-watch=""></span>
182+ <span bm-pe-watch=""></span>
183+ <span bm-pe-watch=""></span>
184+ <span bm-pe-watch=""></span>
185+ <span bm-pe-watch=""></span>
186+ <span bm-pe-watch=""></span>
187+ </li>
188+ -->
189+ </ ul >
190+ </ div >
191+ </ div >
192+ </ div >
0 commit comments