-
-
Notifications
You must be signed in to change notification settings - Fork 8.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Docusaurus Faster #10556
Comments
siteConfig.future.experimental_faster.rspackBundler
#10402
Thanks @slorber, sharing comparison results for our OpenAPI plugin site. Cold Build No Optimization
Cold Build With Experimental Faster Enabled
Edit from @slorber: results above are still based on Webpack. See PaloAltoNetworks/docusaurus-openapi-docs#1003 for the real upgrade. Benchmark shows demo site building:
|
This comment was marked as outdated.
This comment was marked as outdated.
The Rspack support has been merged: #10402 You can try canary Here's an example PR upgrading the React Native website: facebook/react-native-website#4268 How to benchmarkOne 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' Troubleshooting slow buildsIt's possible that enabling this new option does not give you the expected speed increase. Perf loggerYou can get a more verbose performance logger with the RsdoctorAnother option is to use Rsdoctor, which works for both webpack and Rspack. It can tell you which loader/plugin/phase is slow while bundling your app. For many Docusaurus sites (including ours), the slow loaders are postcss/css-loader, mdx loader, and the image loaders of our ideal image plugin. Despite these slow loaders, Docusaurus Faster builds 3x faster. It is possible that a Docusaurus plugin you use slows down your build. Rsdoctor might be able to give you insight on that. We'll probably release an official Rsdoctor plugin for Docusaurus, but in the meantime here's a Docusaurus plugin we built to integrate it into our own site: https://github.com/facebook/docusaurus/blob/main/website/src/plugins/rsdoctor/RsdoctorPlugin.ts |
Tested with a relatively large internal documentation site. PS > Get-ChildItem -File -Recurse | Group-Object -Property 'Extension' | Sort-Object -Property 'Count' -Descending | Format-Table -Property 'Count', 'Name'
Count Name
----- ----
748 .md
553 .png
71 .jpg
24 .json
10 .webp
8 .svg
5 .order
4 .py
3 .drawio
3 .html
3 .pdf
2 .mdx
2 .xml
1 .xlsx
1
1 .avif
1 .zip
PS > Locally, Windows, Yarn v4.5.1, NodeJS v20.18.0. Used following command in PowerShell for timing the build: yarn docusaurus clear; $Stopwatch = [System.Diagnostics.Stopwatch]::StartNew(); yarn build; $Stopwatch.Stop(); $Stopwatch.Elapsed.ToString()
We're pretty stoked on that speedup. 😊 |
which version of docusaurus comes with this experimental config? since i can't get it to run in 3.5.2
|
Answering myself, it is I'm seeing
Nice job Update: build is down from +3 minutes to 30 seconds |
Support for building projects via rspack has been added in the latest Canary version of Docusaurus, which significantly improves compilation speed. ```bash ❯ hyperfine --prepare 'pnpm clear' --runs 5 'DOCUSAURUS_FASTER=false pnpm build' 'DOCUSAURUS_FASTER=true pnpm build' Benchmark 1: DOCUSAURUS_FASTER=false pnpm build Time (mean ± σ): 70.715 s ± 17.150 s [User: 134.096 s, System: 31.651 s] Range (min … max): 52.330 s … 88.497 s 5 runs Benchmark 2: DOCUSAURUS_FASTER=true pnpm build Time (mean ± σ): 30.094 s ± 4.572 s [User: 64.061 s, System: 28.384 s] Range (min … max): 25.832 s … 37.655 s 5 runs Summary DOCUSAURUS_FASTER=true pnpm build ran 2.35 ± 0.67 times faster than DOCUSAURUS_FASTER=false pnpm build ``` see: facebook/docusaurus#10556 (comment) ```release-note None ```
Thanks a lot @slorber, I upgraded today on a Docusaurus website with around 60 Markdown files including Mermaid charts, in Github Actions pipeline it went from average 1m30 build time to 12s ! Impressive ! 💯 |
To add to the list of wins - with faster enabled on one of my sites with 4651 markdown files, the build job went from taking up to 15 minutes to build down to only ~7.5 minutes 🥳 . Thanks so much for the effort y'all put into optimizing this. |
The build from an internal website here went from 4m18s to 1m8s. A great deal, thank you very much! |
Migrated a small doc today very easily, no problem. Build time went from 1m29s to 0m14s! 🚀 Thanks! |
Incredible and impressive improvement. Tested at same environment on same machine with clean build command
Took only 20% (19.712s / 98.320s) build time compared to previous version. |
Our Spectro Cloud documentation build time went from 1 hour and 15 minutes to 35 min 🎉 For context, our builds run on a self-hosted GitHub runner with 8 CPU 16 GB Memory and 150 GB SSD. |
Our Grafana plugin-tools docs builds times went from 36s to 11s build time. Every little helps! Really appreciate the efforts everyone made here. 👏👏👏 |
Important security notice for Docusaurus Faster usersVersion 1.1.7 of More info here: The 1.1.7 version was published yesterday. The Rspack team reacted quickly to deprecate it and publish a safe 1.1.8 version within 1h after the 1.1.7 malicious publish.
If you are unlucky and installed it yesterday during that 1h period, you may have installed that compromised Rspack version. This may also happen when upgrading dependencies or re-generating your package manager lock file. You can check the
Alternatively, you can look at If your Docusaurus site is using Rspack v1.1.7, make sure to upgrade to v1.1.8 immediately, and check for unusual activity on your system (analysis of the malicious script) More info here: Note that the large majority of Docusaurus users should not be affected:
|
This comment has been minimized.
This comment has been minimized.
Build time going from 3:20 build time to 0:24 🚀 |
thanks for reporting! You should be able to customize the swc loader using our existing Maybe using |
Docusaurus v3.8+ will introduce a new Docusaurus Faster option: Depending on your site, it could reduce the SSG time by 50%+ (even more for larger sites), and decrease total build time by more than 15%+. If you have Docusaurus Faster enabled globally, it will be enabled by default when you upgrade to v3.8+. This new option requires to turn on a Docusaurus v4 future flag: If you are using Docusaurus Faster, I recommend using the following settings: export default {
future: {
v4: true, // Opt-in for upcoming v4 breaking changes
experimental_faster: true, // Turn all Docusaurus Faster options on
},
}; |
@slorber Thanks, using webpack.jsLoader option works. Tested again and .swcrc is not picked up. |
@alirezamirian @slorber We ran into the same issue and disabled the flag I tried the workaround mentioned in the comment linked above and had no luck. Will this prevent us from upgrading to 3.8 in the future? |
The same issue? Which one exactly? I never heard of such a timeout issue affecting only Netlify. v3.8 doesn't enable Docusaurus Faster by default, it would be a breaking change that can only be done in an upcoming major version of Docusaurus. I'm not sure yet when we'll turn Docusaurus Faster on by default. During the transition, we'll eventually keep an option for users to downgrade to Webpack and "Docusaurus Slower". |
@slorber My bad, I wasn't specific. It's really odd, if we keep At first we thought it was because of the CSS deprecation warning, but that's not the case as we got those as well when ¯_(ツ)_/¯ |
Hi @slorber,
I tried building with You can reproduce it by trying to build: |
Docusaurus v3.6 is out with the Docusaurus Faster options 🥳 🎉
https://docusaurus.io/blog/releases/3.6
Docusaurus Faster
This is a meta-issue for the Docusaurus Faster project.
The goal is to modernize our infrastructure and greatly reduce the time and memory it takes to build a Docusaurus site in production mode, to fix this long-standing issue #4765.
Before using these flags, you will need to add an extra package encapsulating all the opt-in dependencies:
It includes multiple experimental PRs adding new
siteConfig.future.experimental_faster
options:swcJsLoader
: Use SWC to transpile JS (instead of Babel).swcJsMinimizer
: Use SWC to minify JS (instead of Terser).swcHtmlMinimizer
: Use SWC to minify HTML and inlined JS/CSS (instead of html-minifier-terser).lightningCssMinimizer
: Use Lightning CSS to minify CSS (instead of cssnano and clean-css).rspackBundler
: Use Rspack to bundle your app (instead of webpack).mdxCrossCompilerCache
: Compile MDX files only once for both browser/Node.js environments instead of twice.ssgWorkerThreads
(🆕 v3.8+): Uses a Node.js Worker thread pool to optimize CPU usage during SSG.We recommend turning them on all at once with a simple boolean shortcut. We also recommend turning
future.v4
feature flag on, because some Docusaurus Faster options rely on upcoming changes.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
).It also includes notable memory improvements:
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: #10572
Upgrade PRs
Example upgrade PRs to look at, including some benchmarks.
Community websites:
Popular plugins:
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.
The text was updated successfully, but these errors were encountered: