Skip to content
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

Stabilize custom cache handlers and changing memory size. #57953

Merged
merged 11 commits into from
Jan 17, 2024

Conversation

leerob
Copy link
Member

@leerob leerob commented Nov 2, 2023

This PR stabilizes the previously introduced experimental config options for providing a custom cache handler (for both ISR as well as the Data Cache) and for disabling or configuring the in-memory cache size. The example usage would be as follows:

// next.config.js
module.exports = {
  cacheHandler: require.resolve('./cache-handler.js'),
  cacheMaxMemorySize: 0 // disable default in-memory caching
}

This PR also updates the documentation to better reflect how to use the custom cache handler when self-hosting. Further information will be added in a following PR that also includes a full example of a custom cache handler that implements revalidateTag as well as passing in custom cache tags. The API reference docs have been updated here, as well as a version history added.

I also noticed that we currently have two duplicated versions of the ISR docs in the Pages Router docs: both for rendering and for data fetching. Data Fetching is the correct location for this page. There were no other references to the rendering version in the docs, so that must have been an accident. I'll need to a get a redirect going for that regardless.

Tests have been updated for cacheHandler and I added a new test for cacheMaxMemorySize.

Copy link
Contributor

github-actions bot commented Nov 2, 2023

All broken links are now fixed, thank you!

@timneutkens timneutkens marked this pull request as draft November 2, 2023 18:57
@leerob leerob marked this pull request as ready for review November 2, 2023 19:00
@timneutkens
Copy link
Member

Converted this to draft as the file has to be passed through the compiler before marked as stable.

@timneutkens timneutkens marked this pull request as draft November 2, 2023 19:01
@ijjk
Copy link
Member

ijjk commented Nov 2, 2023

Tests Passed

@ijjk
Copy link
Member

ijjk commented Nov 2, 2023

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js cache-extravaganza Change
buildDuration 12.8s 12.9s N/A
buildDurationCached 7.1s 6.2s N/A
nodeModulesSize 200 MB 200 MB N/A
nextStartRea..uration (ms) 434ms 430ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js cache-extravaganza Change
193.HASH.js gzip 181 B 182 B N/A
3f784ff6-HASH.js gzip 53.4 kB 53.4 kB
433-HASH.js gzip 29 kB 29 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 239 B 242 B N/A
main-HASH.js gzip 31.8 kB 31.8 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB N/A
Overall change 98.6 kB 98.6 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js cache-extravaganza Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js cache-extravaganza Change
_app-HASH.js gzip 194 B 195 B N/A
_error-HASH.js gzip 183 B 181 B N/A
amp-HASH.js gzip 504 B 502 B N/A
css-HASH.js gzip 321 B 321 B
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 255 B 253 B N/A
head-HASH.js gzip 350 B 349 B N/A
hooks-HASH.js gzip 369 B 369 B
image-HASH.js gzip 4.28 kB 4.28 kB N/A
index-HASH.js gzip 255 B 256 B N/A
link-HASH.js gzip 2.61 kB 2.61 kB
routerDirect..HASH.js gzip 312 B 311 B N/A
script-HASH.js gzip 385 B 383 B N/A
withRouter-HASH.js gzip 307 B 308 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 3.4 kB 3.4 kB
Client Build Manifests
vercel/next.js canary vercel/next.js cache-extravaganza Change
_buildManifest.js gzip 483 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js cache-extravaganza Change
index.html gzip 529 B 526 B N/A
link.html gzip 541 B 539 B N/A
withRouter.html gzip 524 B 521 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js cache-extravaganza Change
edge-ssr.js gzip 93.9 kB 93.9 kB N/A
page.js gzip 148 kB 148 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js cache-extravaganza Change
middleware-b..fest.js gzip 623 B 625 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 37.5 kB 37.5 kB N/A
edge-runtime..pack.js gzip 1.92 kB 1.92 kB
Overall change 2.07 kB 2.07 kB
Next Runtimes
vercel/next.js canary vercel/next.js cache-extravaganza Change
app-page-exp...dev.js gzip 169 kB 169 kB
app-page-exp..prod.js gzip 95.6 kB 95.6 kB
app-page-tur..prod.js gzip 96.3 kB 96.3 kB
app-page-tur..prod.js gzip 90.8 kB 90.8 kB
app-page.run...dev.js gzip 142 kB 142 kB
app-page.run..prod.js gzip 90.2 kB 90.2 kB
app-route-ex...dev.js gzip 24.2 kB 24.2 kB
app-route-ex..prod.js gzip 16.8 kB 16.8 kB
app-route-tu..prod.js gzip 16.8 kB 16.8 kB
app-route-tu..prod.js gzip 16.4 kB 16.4 kB
app-route.ru...dev.js gzip 23.6 kB 23.6 kB
app-route.ru..prod.js gzip 16.4 kB 16.4 kB
pages-api-tu..prod.js gzip 9.39 kB 9.39 kB
pages-api.ru...dev.js gzip 9.67 kB 9.67 kB
pages-api.ru..prod.js gzip 9.39 kB 9.39 kB
pages-turbo...prod.js gzip 22 kB 22 kB
pages.runtim...dev.js gzip 22.6 kB 22.6 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 49.7 kB 49.7 kB N/A
Overall change 894 kB 894 kB
Diff details
Diff for page.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for server.runtime.prod.js

Diff too large to display

Commit: 4c6d4c5

leerob added a commit that referenced this pull request Nov 7, 2023
This PR is a combination of many months of feedback from the community
on how to self-host with Next.js. It's became clear talking to many of
y'all that there is confusion about if all features are supported when
self-hosting, and what implications this has when using third-party
providers.

The deployment docs now clarify that all features are supported when
self-hosting. However, this comes with important notes. First, we're
building a standard deployment output, not adapters. We want these docs
to ensure that if you follow what's described on this page, you're going
to have a good experience with Next.js and will be able to take
advantage of all features. Previously, we had to add caveats in here
about different providers and their level of support. We are not doing
that anymore.

Instead, we're providing further details on different features and how
they can be configured when self-hosting. These docs have existed in
other locations (e.g. the specific API pages in our docs), but I've
combined and simplified them here so there's one page you need to read
to learn about all of the options. If you self-host Next.js anywhere
with a Node.js server, Docker container, or static HTML export, all of
the following features will work as expected. Further, we've added other
specifics around self-hosting ISR / Data Cache and configuring your
caching location, which is important when self-hosting with Kubernetes.

Finally, there has been a common feature request to allow runtime
environment variables, rather than statically inlining the values during
the build. While this was possible with `getServerSideProps` in the
Pages Router, if the value needed to be used on the component body, this
option didn't work, as it needed to be serialized and forwarded to the
component. With the App Router, this problem is solved, since Server
Components can render entirely on the server. Thus, when dynamically
rendering, you can just use `process.env.MY_VALUE` and it works.

I also toned down the Vercel section, because, it was a bit much TBH.

Related: #57953

---------

Co-authored-by: Ahmed Abdelbaset <[email protected]>
Co-authored-by: Tim Neutkens <[email protected]>
@huozhi huozhi marked this pull request as ready for review January 17, 2024 22:19
@huozhi huozhi merged commit 16dcebe into canary Jan 17, 2024
67 checks passed
@huozhi huozhi deleted the cache-extravaganza branch January 17, 2024 22:42
ForsakenHarmony pushed a commit that referenced this pull request Jan 18, 2024
huozhi added a commit that referenced this pull request Jan 18, 2024
Follow up for #57953 for DX, give better warnings

x-ref:
#60828 (comment)

Closes NEXT-2156
@github-actions github-actions bot added the locked label Feb 1, 2024
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 1, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants