|
1 | 1 | import { add, average, percent } from './math'
|
2 | 2 |
|
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 |
| - |
15 | 3 | // Get the total time taken combining all the phases
|
16 |
| -const getTotalTime = components => |
| 4 | +const getSummarisedTotalTime = components => |
17 | 5 | components.reduce((acc, component) => (acc += component.totalTime), 0)
|
18 | 6 |
|
19 | 7 | // Plot the timings (average time in ms, component instances, total time in ms)
|
@@ -58,68 +46,38 @@ const createSchema = (store, component, totalTime) => ({
|
58 | 46 | )
|
59 | 47 | })
|
60 | 48 |
|
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 | +} |
69 | 69 |
|
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) |
113 | 79 | )
|
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) |
123 | 81 | }
|
124 | 82 |
|
125 | 83 | export { generateDataFromMeasures }
|
0 commit comments