Skip to content

Commit 3a7d6ec

Browse files
committed
Add performance benchmarking
1 parent d91f6d3 commit 3a7d6ec

File tree

2 files changed

+545
-0
lines changed

2 files changed

+545
-0
lines changed

perf/reactor.js

+312
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,312 @@
1+
var Reactor = Nuclear.Reactor
2+
var Store = Nuclear.Store
3+
var toImmutable = Nuclear.toImmutable
4+
var Immutable = Nuclear.Immutable
5+
var Map = Nuclear.Immutable.Map
6+
7+
function pausecomp(millis) {
8+
var date = new Date();
9+
var curDate = null;
10+
do { curDate = new Date(); }
11+
while(curDate-date < millis);
12+
}
13+
14+
function dotimes(times, fn) {
15+
for (var i = 0; i < times; i++) {
16+
fn(i)
17+
}
18+
}
19+
20+
describe('Reactor', () => {
21+
//describe('registering stores', () => {
22+
//function registerStores(count) {
23+
//var reactor = new Reactor()
24+
25+
//var storeMap = {}
26+
27+
//for (var i = 0; i < count; i++) {
28+
//storeMap['store' + i] = new Store({
29+
//getInitialState: function() {
30+
//return toImmutable({
31+
//foo: 'bar',
32+
//})
33+
//},
34+
//})
35+
//}
36+
37+
//reactor.registerStores(storeMap)
38+
//}
39+
40+
//it('1 store', () => {
41+
//registerStores(1)
42+
//})
43+
44+
//it('10 store', () => {
45+
//registerStores(10)
46+
//})
47+
48+
//it('100 stores', () => {
49+
//registerStores(100)
50+
//})
51+
//})
52+
53+
//describe('dispatching action', () => {
54+
//describe('1 store', () => {
55+
//var reactor
56+
57+
//beforeEach(() => {
58+
//reactor = new Reactor()
59+
60+
//reactor.registerStores({
61+
//store1: new Store({
62+
//getInitialState: function() {
63+
//return Map({
64+
//data: Map({})
65+
//})
66+
//},
67+
68+
//initialize: function() {
69+
//this.on('set', function(state, params) {
70+
//return state.update('data', data => data.set(params.key, toImmutable(params.value)))
71+
//})
72+
//},
73+
//})
74+
//})
75+
//})
76+
77+
//it('1 dispatch', () => {
78+
//reactor.dispatch('set', {
79+
//key: 'key',
80+
//value: { foo: 'bar' },
81+
//})
82+
//})
83+
84+
//it('10 dispatch', () => {
85+
//for (var i = 0; i < 10; i++) {
86+
//reactor.dispatch('set', {
87+
//key: 'key' + i,
88+
//value: { foo: 'bar' },
89+
//})
90+
//}
91+
//})
92+
//})
93+
94+
//describe('10 stores', () => {
95+
//var reactor
96+
97+
//beforeEach(() => {
98+
//reactor = new Reactor()
99+
100+
//var storeMap = {}
101+
//for (var i = 0; i < 10; i++) {
102+
//storeMap['store' + i] = new Store({
103+
//getInitialState: function() {
104+
//return Map({
105+
//data: Map({})
106+
//})
107+
//},
108+
//initialize: function() {
109+
//this.on('set', function(state, params) {
110+
//return state.update('data', data => data.set(params.key, toImmutable(params.value)))
111+
//})
112+
//},
113+
//})
114+
//}
115+
116+
//reactor.registerStores(storeMap)
117+
//})
118+
119+
//it('1 dispatch', () => {
120+
//reactor.dispatch('set', {
121+
//key: 'key',
122+
//value: { foo: 'bar' },
123+
//})
124+
//})
125+
126+
//it('10 dispatch', () => {
127+
//for (var i = 0; i < 10; i++) {
128+
//reactor.dispatch('set', {
129+
//key: 'key' + i,
130+
//value: { foo: 'bar' },
131+
//})
132+
//}
133+
//})
134+
//})
135+
//})
136+
137+
describe('observe', () => {
138+
describe('100 stores', () => {
139+
var reactor
140+
141+
beforeEach(() => {
142+
reactor = new Reactor()
143+
144+
var storeMap = {}
145+
dotimes(100, (i) => {
146+
storeMap['store' + i] = new Store({
147+
getInitialState: function() {
148+
return Map({
149+
data: Map({})
150+
})
151+
},
152+
153+
initialize: function() {
154+
this.on('set' + i, function(state, params) {
155+
return state.update('data', data => data.set(params.key, params.value))
156+
})
157+
},
158+
})
159+
})
160+
161+
reactor.registerStores(storeMap)
162+
})
163+
164+
it('setup 1 observers', () => {
165+
var counter = 0
166+
reactor.observe(['store1'], (val) => {
167+
counter += 1
168+
})
169+
})
170+
171+
it('setup 100 observers', () => {
172+
var counter = 0
173+
dotimes(100, (index) => {
174+
reactor.observe(['store' + index], (val) => {
175+
counter += 1
176+
})
177+
})
178+
})
179+
180+
describe('1 observer', () => {
181+
var counter = 0
182+
beforeEach(() => {
183+
reactor.observe(['store1'], (val) => {
184+
counter += val
185+
})
186+
})
187+
188+
it('keypath observe, immutable value', () => {
189+
dotimes(6, (index) => {
190+
var value = (index % 2)
191+
? Map({ foo: 'bar' })
192+
: Map({ foo: 'baz' })
193+
194+
reactor.dispatch('set1', {
195+
key: 'key',
196+
value: value,
197+
})
198+
})
199+
})
200+
})
201+
202+
describe('100 observers', () => {
203+
var counter = 0
204+
beforeEach(() => {
205+
dotimes(100, (index) => {
206+
reactor.observe(['store' + index], (val) => {
207+
counter += 1
208+
})
209+
})
210+
})
211+
212+
it('keypath observe, immutable value', () => {
213+
var counter = 0
214+
215+
dotimes(6, (index) => {
216+
var value = (index % 2)
217+
? Map({ foo: 'bar' })
218+
: Map({ foo: 'baz' })
219+
220+
reactor.dispatch('set1', {
221+
key: 'key',
222+
value: value,
223+
})
224+
})
225+
})
226+
})
227+
228+
describe('100 complex observers', () => {
229+
var counter = 0
230+
var currentProject
231+
var projectGetter
232+
233+
beforeEach(() => {
234+
dotimes(100, (index) => {
235+
reactor.observe(['store1', 'data', 'prop' + index], (val) => {
236+
//pausecomp(100)
237+
counter += 1
238+
})
239+
})
240+
241+
var store1Projects = [
242+
['store1', 'data', 'projects'],
243+
(projects) => {
244+
return projects ? projects : Map({})
245+
},
246+
]
247+
248+
var store2ProjectId = [
249+
['store2', 'data', 'projectId'],
250+
(id) => {
251+
return id ? id : 1
252+
},
253+
]
254+
255+
projectGetter = [
256+
store1Projects,
257+
store2ProjectId,
258+
(projects, id) => {
259+
var res = projects.get(String(id))
260+
return res
261+
},
262+
]
263+
264+
reactor.dispatch('set1', {
265+
key: 'projects',
266+
value: Map({
267+
1: Map({ id: 1, name :'proj1' }),
268+
2: Map({ id: 2, name :'proj2' }),
269+
3: Map({ id: 3, name :'proj3' }),
270+
4: Map({ id: 4, name :'proj4' }),
271+
})
272+
})
273+
274+
reactor.dispatch('set2', {
275+
key: 'projectId',
276+
value: 2,
277+
})
278+
279+
reactor.observe(projectGetter, () => {
280+
//pausecomp(10)
281+
})
282+
})
283+
284+
it('getter observe, composition', () => {
285+
var counter = 0
286+
287+
dotimes(10, (index) => {
288+
reactor.dispatch('set1', {
289+
key: 'key' + index,
290+
value: index,
291+
})
292+
})
293+
reactor.dispatch('set2', {
294+
key: 'projectId',
295+
value: counter,
296+
})
297+
// set other stores
298+
dotimes(10, (index) => {
299+
reactor.dispatch('set' + (index + 3), {
300+
key: 'key' + index,
301+
value: index,
302+
})
303+
})
304+
reactor.dispatch('set2', {
305+
key: 'projectId',
306+
value: 3,
307+
})
308+
})
309+
})
310+
})
311+
})
312+
})

0 commit comments

Comments
 (0)