Skip to content

Run prebuild pages in parallel #126

Open
@StarpTech

Description

@StarpTech

Currently, I see no benefit to run the builds (pages) sequential. We can improve the performance by a factor of 5x if we run them in parallel. Or do I miss something?

Example

prebuild-worker.js

'use strict';

const { run } = require('@marko/prebuild');
const lassoConfig = require('./src/lasso-config');

async function prebuild(path) {
  await run({
    config: lassoConfig, // Either a lasso config object, or a path to one.
    flags: [], // Lasso flags to use when building the pages.
    pages: [path]
  });
}

prebuild(process.argv[2]).catch(err => {
  throw err;
});

prebuild.js

'use strict';

const globby = require('globby');
const execa = require('execa');

async function prebuild() {
  const ops = (await globby(['src/pages/*/*.marko'])).map(path =>
    execa('node', ['prebuild-worker.js', path])
  );
  await Promise.all(ops);
  // All templates have their prebuild.json files written to disk.
  console.log(`Prebuild completed!`);
}

prebuild().catch(err => {
  throw err;
});

Benchmark

CPU: AMD Ryzen 5 2600X (12) @ 3.600G
SSD

12 pages, 30 components with sass, babel, minifying, bundling

~80sec
~17sec with the solution above

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions