Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c3ca41a

Browse files
authored
perf(gatsby): Eliminate generator (gatsbyjs#20102)
* perf(gatsby): Eliminate generator The generator eliminated by this commit was working fine but felt a little redundant. And since it was ranking at the top of the perf chart, I changed it to a plain `forEach` loop, which dropped it from the benchmark chart. Additionally dropped two `Array.from` because they were redundant.
1 parent da8999e commit c3ca41a

File tree

2 files changed

+15
-28
lines changed

2 files changed

+15
-28
lines changed

packages/gatsby/src/redux/nodes.js

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,26 +103,20 @@ exports.saveResolvedNodes = async (nodeTypeNames, resolver) => {
103103
}
104104
}
105105

106-
const getNodesAndResolvedNodes = typeName => {
106+
const addResolvedNodes = (typeName, arr) => {
107107
const { nodesByType, resolvedNodesCache } = store.getState()
108-
const nodes = nodesByType.get(typeName)
109-
if (nodes) {
110-
const resolvedNodes = resolvedNodesCache.get(typeName)
108+
const nodes /*: Map<mixed> */ = nodesByType.get(typeName)
109+
110+
if (!nodes) return
111+
112+
const resolvedNodes = resolvedNodesCache.get(typeName)
113+
114+
nodes.forEach(node => {
111115
if (resolvedNodes) {
112-
return Array.from(resolvedNodesIterator(nodes, resolvedNodes))
113-
} else {
114-
return Array.from(nodes.values())
116+
node.__gatsby_resolved = resolvedNodes.get(node.id)
115117
}
116-
} else {
117-
return []
118-
}
119-
}
120-
121-
function* resolvedNodesIterator(nodes, resolvedNodes) {
122-
for (const node of nodes.values()) {
123-
node.__gatsby_resolved = resolvedNodes.get(node.id)
124-
yield node
125-
}
118+
arr.push(node)
119+
})
126120
}
127121

128-
exports.getNodesAndResolvedNodes = getNodesAndResolvedNodes
122+
exports.addResolvedNodes = addResolvedNodes

packages/gatsby/src/redux/run-sift.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,20 +119,13 @@ function handleMany(siftArgs, nodes, sort, resolvedFields) {
119119
* if `firstOnly` is true
120120
*/
121121
const runSift = (args: Object) => {
122-
const { getNode, getNodesAndResolvedNodes } = require(`./nodes`)
122+
const { getNode, addResolvedNodes } = require(`./nodes`)
123123

124124
const { nodeTypeNames } = args
125125

126-
let nodes
126+
let nodes = []
127127

128-
if (nodeTypeNames.length > 1) {
129-
nodes = nodeTypeNames.reduce((acc, typeName) => {
130-
acc.push(...getNodesAndResolvedNodes(typeName))
131-
return acc
132-
}, [])
133-
} else {
134-
nodes = getNodesAndResolvedNodes(nodeTypeNames[0])
135-
}
128+
nodeTypeNames.forEach(typeName => addResolvedNodes(typeName, nodes))
136129

137130
return runSiftOnNodes(nodes, args, getNode)
138131
}

0 commit comments

Comments
 (0)