Skip to content

Commit

Permalink
Use fastq instead of better-queue for 20% speed boost
Browse files Browse the repository at this point in the history
  • Loading branch information
KyleAMathews committed Feb 3, 2021
1 parent df09716 commit 78d6986
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 11 deletions.
31 changes: 31 additions & 0 deletions packages/gatsby/src/query/fastq-page-queries.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { queryRunner } from "./query-runner"
const queue = require(`fastq`)(worker, 15)
const { store } = require(`../redux`)

function worker({ id, graphqlRunner, activity }, cb) {
const state = store.getState()
const page = state.pages.get(id)
if (page) {
// console.log(id, page)
const component = state.components.get(page.componentPath)
const { path, componentPath, context } = page
const { query } = component
const job = {
id: path,
query,
isPage: true,
componentPath,
context: {
...page,
...context,
},
}
// console.log(job)
queryRunner(graphqlRunner, job, activity?.span).then(result => {
// console.log(result)
cb()
})
}
}

export default queue
49 changes: 38 additions & 11 deletions packages/gatsby/src/query/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const _ = require(`lodash`)
const { store } = require(`../redux`)
const { hasFlag, FLAG_ERROR_EXTRACTION } = require(`../redux/reducers/queries`)
const queryQueue = require(`./queue`)
const fastqQueue = require(`./fastq-page-queries`).default

/**
* Calculates the set of dirty query IDs (page.paths, or staticQuery.id's).
Expand Down Expand Up @@ -93,20 +94,46 @@ const processPageQueries = async (
// `internal-data-bridge`, but the actual page object is only
// created during `gatsby develop`.

const jobs = []
queryIds.forEach(id => {
const page = state.pages.get(id)
if (page) {
const job = createPageQueryJob(state, page)
jobs.push(job)
// const jobs = []
return new Promise(async (resolve, reject) => {
queryIds.forEach(id => {
fastqQueue.push({ id, graphqlRunner, activity }, err => {
if (err) {
fastqQueue.kill()
return reject(err)
}
if (activity.tick) {
activity.tick()
}
})
})

console.log(`idle`, fastqQueue.idle())
if (!fastqQueue.idle()) {
await new Promise(resolve2 => {
fastqQueue.drain = () => {
console.log(`drained`)
resolve2()
}
})
}
})

await processQueries(jobs, {
activity,
graphqlRunner,
graphqlTracing,
console.log(`done`)
resolve()
})

// const page = state.pages.get(id)
// if (page) {
// const job = createPageQueryJob(state, page)
// jobs.push(job)
// }
// })

// await processQueries(jobs, {
// activity,
// graphqlRunner,
// graphqlTracing,
// })
}

const createPageQueryJob = (state, page) => {
Expand Down

0 comments on commit 78d6986

Please sign in to comment.