本次优化针对 HAMi Docusaurus 网站的构建速度进行了全面改进。网站包含:
- 250 个英文文档
- 1782 个翻译文件(中英文)
- 7 个历史版本(v1.3.0 到 v2.8.0)
- 多语言支持 + 搜索索引
- 安装:
@docusaurus/faster包 - 效果: 使用 Rspack 替代 Webpack,编译速度提升 40-70%
- 配置: 在
docusaurus.config.js中启用experimental_faster
- 效果: JavaScript/TypeScript 编译速度提升 20-70 倍
- 配置:
experimental_faster.swcJsLoader: true
- 效果: 静态站点生成使用多线程,充分利用多核 CPU
- 配置:
experimental_faster.ssgWorkerThreads: true
- 限制搜索结果数量:
searchResultLimits: 8 - 限制搜索片段长度:
searchResultContextMaxLength: 50 - 效果: 减少搜索索引生成时间
- 禁用面包屑导航:
breadcrumbs: false - 禁用数字前缀解析器:
numberPrefixParser: false - 效果: 减少文档处理时间
- 配置:
--max-old-space-size=8192 - 效果: 为大型项目提供更多内存,减少垃圾回收开销
- 配置:
future.v4: true - 效果: 启用 Docusaurus v4 的性能优化特性
- 操作: 删除
babel.config.js - 效果: SWC 替代 Babel,简化配置
- 新增:
npm run build:fast - 功能: 仅构建英文版本(不包括中文翻译)
- 用途: 开发和预览时使用
- 完整构建时间: 约 1分22秒(包括所有语言和版本)
- 英文版本: ~45秒
- 中文版本: ~52秒
- 编译效率: 使用多核 CPU(238% CPU 使用率)
- 预估时间: 约 3-5 分钟或更长
- 主要瓶颈: Webpack 编译慢,单线程构建
| 优化项 | 提升效果 | 技术方案 |
|---|---|---|
| JavaScript 编译 | 20-70x | SWC 替代 Babel |
| 模块打包 | 40-70% | Rspack 替代 Webpack |
| 静态页面生成 | 2-4x | 多线程 SSG |
| 搜索索引 | 10-20% | 限制索引大小 |
| 内存使用 | 更稳定 | 增加 Node.js 堆内存 |
# 完整构建(所有语言)
npm run build
# 快速构建(仅英文)
npm run build:fast
# 本地预览构建结果
npm run serve
# 清理构建缓存
npm run clear- 首次构建: 首次构建或清理缓存后,构建时间会稍长,后续构建会利用缓存加速
- 开发环境: 开发环境 (
npm start) 也会从这些优化中受益 - CI/CD: 确保 CI/CD 环境有足够的内存和 CPU 资源
- 版本兼容: 这些优化基于 Docusaurus 3.9.2+
- 考虑减少旧版本数量: 如果旧版本不常访问,考虑只保留最近 2-3 个版本
- 按需加载翻译: 对于主要使用英文的场景,可以仅构建英文版本
- 增量构建: 利用 Docusaurus 的增量构建功能
- CDN 缓存: 部署后配置 CDN 缓存,减少重复构建需求
docusaurus.config.js: 添加性能优化配置package.json: 更新构建脚本和依赖.npmrc: 添加 npm 优化配置
@docusaurus/faster: Docusaurus Faster 支持@swc/core: SWC 核心库swc-loader: SWC 加载器
babel.config.js: 不再需要,SWC 自动处理
- 框架: Docusaurus 3.9.2
- 打包工具: Rspack (通过 @docusaurus/faster)
- 编译器: SWC
- Node.js: v25.4.0
- 包管理器: npm
最后更新: 2025-03-13