Skip to content

Commit 5a9fc05

Browse files
authored
Merge pull request #27 from adnasa/aa-functional-generate
refactor(generate): take a functional approach
2 parents 1ebee72 + e82ce13 commit 5a9fc05

File tree

1 file changed

+31
-73
lines changed

1 file changed

+31
-73
lines changed

src/shared/generate.js

Lines changed: 31 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,7 @@
11
import { add, average, percent } from './math'
22

3-
// Sort the all components by total time
4-
const sortComponents = components =>
5-
components.sort((a, b) => b.totalTime - a.totalTime)
6-
7-
// Align the components by their name and total time
8-
const alignComponents = totalTime => {
9-
return Object.keys(totalTime).reduce((acc, name) => {
10-
acc.push({ name, totalTime: totalTime[name] })
11-
return acc
12-
}, [])
13-
}
14-
153
// Get the total time taken combining all the phases
16-
const getTotalTime = components =>
4+
const getSummarisedTotalTime = components =>
175
components.reduce((acc, component) => (acc += component.totalTime), 0)
186

197
// Plot the timings (average time in ms, component instances, total time in ms)
@@ -58,68 +46,38 @@ const createSchema = (store, component, totalTime) => ({
5846
)
5947
})
6048

61-
// Generate the data from React performance measures
62-
const generateDataFromMeasures = store => {
63-
let componentsByTotalTime = {}
64-
65-
for (const componentName in store) {
66-
// Default
67-
componentsByTotalTime[componentName] =
68-
componentsByTotalTime[componentName] || 0
49+
const getTotalComponentTimeSpent = componentPhases => {
50+
const phases = [
51+
'mount',
52+
'unmount',
53+
'update',
54+
'render',
55+
'componentWillMount',
56+
'componentDidMount',
57+
'componentWillReceiveProps',
58+
'shouldComponentUpdate',
59+
'componentWillUpdate',
60+
'componentDidUpdate',
61+
'componentWillUnmount'
62+
]
63+
return phases.reduce(
64+
(totalTimeSpent, phase) =>
65+
(totalTimeSpent += add(componentPhases[phase].timeSpent)),
66+
0
67+
)
68+
}
6969

70-
// mount time
71-
componentsByTotalTime[componentName] += add(
72-
store[componentName].mount.timeSpent
73-
)
74-
// unmount time
75-
componentsByTotalTime[componentName] += add(
76-
store[componentName].unmount.timeSpent
77-
)
78-
// update time
79-
componentsByTotalTime[componentName] += add(
80-
store[componentName].update.timeSpent
81-
)
82-
// render time
83-
componentsByTotalTime[componentName] += add(
84-
store[componentName].render.timeSpent
85-
)
86-
// time spent in componentWillMount
87-
componentsByTotalTime[componentName] += add(
88-
store[componentName].componentWillMount.timeSpent
89-
)
90-
// time spent in componentDidMount
91-
componentsByTotalTime[componentName] += add(
92-
store[componentName].componentDidMount.timeSpent
93-
)
94-
// time spent in componentWillReceiveProps
95-
componentsByTotalTime[componentName] += add(
96-
store[componentName].componentWillReceiveProps.timeSpent
97-
)
98-
// time spent in shouldComponentUpdate
99-
componentsByTotalTime[componentName] += add(
100-
store[componentName].shouldComponentUpdate.timeSpent
101-
)
102-
// time spent in componentWillUpdate
103-
componentsByTotalTime[componentName] += add(
104-
store[componentName].componentWillUpdate.timeSpent
105-
)
106-
// time spent in componentDidUpdate
107-
componentsByTotalTime[componentName] += add(
108-
store[componentName].componentDidUpdate.timeSpent
109-
)
110-
// time spent in componentWillUnmount
111-
componentsByTotalTime[componentName] += add(
112-
store[componentName].componentWillUnmount.timeSpent
70+
const generateDataFromMeasures = store => {
71+
const componentsWithTotalTime = Object.keys(store).map(componentName => ({
72+
name: componentName,
73+
totalTime: getTotalComponentTimeSpent(store[componentName])
74+
}))
75+
const totalTime = getSummarisedTotalTime(componentsWithTotalTime)
76+
return componentsWithTotalTime
77+
.map(componentWithTotalTime =>
78+
createSchema(store, componentWithTotalTime, totalTime)
11379
)
114-
}
115-
116-
const components = alignComponents(componentsByTotalTime)
117-
118-
const totalTime = getTotalTime(components)
119-
120-
return sortComponents(components).map(component =>
121-
createSchema(store, component, totalTime)
122-
)
80+
.sort((a, b) => b.totalTimeSpent - a.totalTimeSpent)
12381
}
12482

12583
export { generateDataFromMeasures }

0 commit comments

Comments
 (0)