Open slorber opened 1 week ago
Thanks @slorber, sharing comparison results for our OpenAPI plugin site.
[PERF] Build > en > Bundling with webpack - 41.58 seconds!
[PERF] Build > en > SSG > Load App renderer > Load server bundle - 8.49 ms
[PERF] Build > en > SSG > Load App renderer > Server bundle size = 17.241 MB
[PERF] Build > en > SSG > Load App renderer > Evaluate server bundle - 225.13 ms
[PERF] Build > en > SSG > Load App renderer - 234.15 ms
[PERF] Build > en > SSG > Generate static files - 3.26 seconds!
[PERF] Build > en > SSG - 3.50 seconds!
[PERF] Build > en > postBuild() - 10.58 ms
[PERF] Build > en > Broken links checker - 28.01 ms
[SUCCESS] Generated static files in "build".
[PERF] Build > en - 46.38 seconds!
[PERF] Build - 46.38 seconds!
[INFO] Use `npm run serve` command to test your build locally.
✨ Done in 51.97s.
[PERF] Build > en > Bundling with webpack - 23.44 seconds!
[PERF] Build > en > SSG > Load App renderer > Load server bundle - 7.16 ms
[PERF] Build > en > SSG > Load App renderer > Server bundle size = 17.767 MB
[PERF] Build > en > SSG > Load App renderer > Evaluate server bundle - 222.76 ms
[PERF] Build > en > SSG > Load App renderer - 230.31 ms
[PERF] Build > en > SSG > Generate static files - 1.82 seconds!
[PERF] Build > en > SSG - 2.06 seconds!
[PERF] Build > en > postBuild() - 9.49 ms
[PERF] Build > en > Broken links checker - 27.01 ms
[SUCCESS] Generated static files in "build".
[PERF] Build > en - 26.79 seconds!
[PERF] Build - 26.79 seconds!
[INFO] Use `npm run serve` command to test your build locally.
✨ Done in 32.52s.
Thanks for reporting these early results @sserrata
Note that the Rspack PR hasn't been merged yet and if you use canary today you are still using Webpack.
For plugin authors, it's possible that Rspack will not work immediately out of the box. Some plugins will have to adjust their code to add Rspack support, eventually requiring a minimum version of Docusaurus v3.6+ to do so.
Follow this issue to know when a guide for plugin authors is ready: https://github.com/facebook/docusaurus/issues/10572
The Rspack support has been merged: https://github.com/facebook/docusaurus/pull/10402
You can try canary 0.0.0-6101
or above to benefit from all the upcoming perf improvements.
Here's an example PR upgrading the React Native website: https://github.com/facebook/react-native-website/pull/4268
One way to benchmark this is to use hyperfine with an env variable:
const config = {
future: {
experimental_faster: (process.env.DOCUSAURUS_FASTER ?? 'true') === 'true';,
},
}
For cold builds:
hyperfine --prepare 'yarn clear' --runs 5 'DOCUSAURUS_FASTER=false yarn build' 'DOCUSAURUS_FASTER=true yarn build'
For warm rebuilds:
DOCUSAURUS_FASTER=false yarn build
hyperfine --runs 5 'DOCUSAURUS_FASTER=false yarn build' 'DOCUSAURUS_FASTER=true yarn build'
Docusaurus Faster
This is a meta-issue for the Docusaurus Faster project.
The goal is to modernize our infrastructure and greatly reduce the time it takes to build a Docusaurus site in production mode.
It includes multiple experimental PRs adding new
siteConfig.future.experimental_faster
options:swcJsLoader
swcJsMinimizer
swcHtmlMinimizer
lightningCssMinimizer
mdxCrossCompilerCache
rspackBundler
We recommend turning them on all at once with
siteConfig.future.experimental_faster: true
, but you can also turn them on/off one by one to troubleshoot potential problems.Note that the
rspackBundler
option requiresswcJsLoader
,swcJsMinimizer
, andlightningCssMinimizer
to be enabled first.It is possible that certain combinations of options do not work, and our CI doesn't cover all possible permutations (only
true
/false
).What to expect
With
experimental_faster: true
, our Docusaurus website builds:Although rebuilds (with warm
./node_modules/.cache
) are not faster (yet), we recommend you enable theexperimental_faster: true
option to future-proof your site against our new dependencies and report us potential problems you encounter.Our core plugins/themes are all compatible with this new option, and we expect most community plugins to be compatible out-of-the-box. Some plugins might need minor adjustments to make them compatible with Rspack, and we'll help the community to make our ecosystem compatible with Rspack.
This option is relatively safe to use in production: we have deployed our own website with it already:
For Docusaurus plugins authors
Some plugins implementing the
configureWebpack()
lifecycle hook might need to adjust their code to add support for Rspack.I will write a guide for them in this sister issue: https://github.com/facebook/docusaurus/issues/10572
Contributing to this issue
We want our community to share feedback on this Docusaurus Faster project.
Please try to adopt it as part of the v3.6+ / canary releases, and tell us how it works for you.
If you encounter problems, please let us know here, and we might create dedicated issues if needed.
This general issue is a great place to follow the Docusaurus Faster project overall, as we try to stabilize it and aim to make it the default for an upcoming major version.