next.js
aa8a243e - feat: use Rspack persistent cache by default (#81399)

Commit
9 days ago
feat: use Rspack persistent cache by default (#81399) Rspack now enables persistent caching by default. ## Performance Comparison ### Pages Router I benchmarked performance using this repo: https://github.com/SyMind/chakra-ui-docs/tree/next-rspack to test the Next.js pages router. I tested the performance with the following steps: 1. Execute `pnpm run dev` 2. Wait for the server to be ready (indicated by the 'Ready' message) 3. Run curl on the root endpoint (/) Each build was run 5 times, and the shortest time to reach "Compiled successfully" was recorded. Test environment: Apple M1 Pro CPU | Tool | Build without cache | Build with cache | Dev without cache | Dev with cache | |-------------|---------------------|------------------|---------------------------------|----------------| | Rspack | 3.8s | 2.6s | 1.7s | 3ms | | Webpack | 14.0s | 4.0s | 7.8s | 3.2s | ### App Router I benchmarked performance using this repo: https://github.com/SyMind/shadcn-ui/tree/next-rspack to test the Next.js app router. I tested the performance with the following steps: 1. Execute `pnpm run dev` or `pnpm run build` 2. Wait for the server to be ready (indicated by the 'Ready' message) 3. Run curl on the root endpoint (/) Each build was run 5 times, and the shortest time to reach "Compiled successfully" was recorded. Test environment: Apple M1 Pro CPU | Bundler | Build (No Cache) | Build (Cache) | Dev (No Cache) | Dev (Cache) | |------------|----------------------|-------------------|--------------------|-----------------| | Rspack | 12.3s | 5.9s | 7.1s | 1941ms | | Webpack | 27.0s | 13.0s | 11s | 9.6s | ## About Rspack Persistent Cache Strategy > packages/next/src/server/dev/hot-reloader-rspack.ts Rspack's persistent caching differs from Webpack in how it manages module graphs. While Webpack incrementally updates modules, Rspack operates on complete module graph snapshots for cache restoration. Problem: - Next.js dev server starts with no page modules in the initial entry points - When Rspack restores from persistent cache, it finds no modules and purges the entire module graph - Later page requests find no cached module information, preventing cache reuse Solution: - Track successfully built page entries after each compilation - Restore these entries on dev server restart to maintain module graph continuity - This ensures previously compiled pages can leverage persistent cache for faster builds ## Note I have updated the test case configuration in `test/integration/telemetry/next.config.use-cache` to disable persistent cache. This is because, whether using webpack or Rspack, when persistent caching is enabled, modules are no longer recompiled by loaders, which prevents the Telemetry plugin from collecting information. Please note that this issue also exists with webpack. You can reproduce it locally by running `pnpm run test test/integration/telemetry/test/config.test.js` twice.
Author
Parents
Loading