-
Notifications
You must be signed in to change notification settings - Fork 26.9k
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
Disable 2mb limit for custom incrementalCacheHandler #59976
Disable 2mb limit for custom incrementalCacheHandler #59976
Conversation
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
Tests Passed |
Stats from current PRDefault BuildGeneral Overall increase
|
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
buildDuration | 13.7s | 13.9s | |
buildDurationCached | 7.8s | 6.8s | N/A |
nodeModulesSize | 200 MB | 200 MB | |
nextStartRea..uration (ms) | 436ms | 447ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
193.HASH.js gzip | 181 B | 182 B | N/A |
3f784ff6-HASH.js gzip | 53.3 kB | 53.3 kB | ✓ |
433-HASH.js gzip | 28.5 kB | 28.6 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.7 kB | 31.8 kB | N/A |
webpack-HASH.js gzip | 1.7 kB | 1.7 kB | N/A |
Overall change | 98.5 kB | 98.5 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | 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 | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
_buildManifest.js gzip | 483 B | 484 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
index.html gzip | 526 B | 526 B | ✓ |
link.html gzip | 539 B | 539 B | ✓ |
withRouter.html gzip | 523 B | 521 B | N/A |
Overall change | 1.06 kB | 1.06 kB | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
edge-ssr.js gzip | 93.8 kB | 93.8 kB | N/A |
page.js gzip | 147 kB | 147 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 625 B | 624 B | N/A |
middleware-r..fest.js gzip | 151 B | 151 B | ✓ |
middleware.js gzip | 37.4 kB | 37.4 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 | vordgi/next.js fix/incremental-cache-limit-for-custom-handler | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 169 kB | 169 kB | ✓ |
app-page-exp..prod.js gzip | 94.2 kB | 94.2 kB | ✓ |
app-page-tur..prod.js gzip | 94.9 kB | 94.9 kB | ✓ |
app-page-tur..prod.js gzip | 89.5 kB | 89.5 kB | ✓ |
app-page.run...dev.js gzip | 139 kB | 139 kB | ✓ |
app-page.run..prod.js gzip | 88.8 kB | 88.8 kB | ✓ |
app-route-ex...dev.js gzip | 24.1 kB | 24.1 kB | ✓ |
app-route-ex..prod.js gzip | 16.7 kB | 16.7 kB | ✓ |
app-route-tu..prod.js gzip | 16.7 kB | 16.7 kB | ✓ |
app-route-tu..prod.js gzip | 16.3 kB | 16.3 kB | ✓ |
app-route.ru...dev.js gzip | 23.5 kB | 23.5 kB | ✓ |
app-route.ru..prod.js gzip | 16.3 kB | 16.3 kB | ✓ |
pages-api-tu..prod.js gzip | 9.38 kB | 9.38 kB | ✓ |
pages-api.ru...dev.js gzip | 9.65 kB | 9.65 kB | ✓ |
pages-api.ru..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-turbo...prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
pages.runtim...dev.js gzip | 22.6 kB | 22.6 kB | ✓ |
pages.runtim..prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
server.runti..prod.js gzip | 49.5 kB | 49.5 kB | N/A |
Overall change | 883 kB | 883 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
I don’t even know why I didn’t immediately test just fetch, it’s much better, thanks @ijjk 🧡 |
### Fixing a bug I'm sorry, I have no idea how I managed to delete this, as I just copied the code. However, I had to figure out why the tests passed. When I test the running application locally, it works as expected. So, when a route is first used in a running production application in a test, `ctx.fetchCache` is `undefined`. Therefore, the error rule does not trigger on the first request, and the cache is successfully written. This may result in artifacts in FetchCache in Vercel and possibly in other parts of the code. ```ts if ( ctx.fetchCache && // <- Undefined on first request // we don't show this error/warning when a custom cache handler is being used // as it might not have this limit !this.hasCustomCacheHandler && JSON.stringify(data).length > 2 * 1024 * 1024 ) { if (this.dev) { throw new Error(`fetch for over 2MB of data can not be cached`) } return } ``` I'm 95% sure that this is a bug and it shouldn't work like this. I'll look into this later and if there is an error, I'll put it into a task and try to figure it out later. Unfortunately, the [test](https://github.com/vordgi/next.js/blob/7e028fb6d8598cfcca8de514e4608374f931c973/test/e2e/app-dir/app-static/app-static.test.ts#L3080) from [previous PR](#59976) is not working yet, although it is correct from my point of view. I think it should be kept and the problem above should be fixed. Co-authored-by: JJ Kasper <jj@jjsweb.site>
### Fixing a bug ### What? Disable 2MB limit for custom incrementalCacheHandler ### Why? The limit is necessary because `FetchCache` has a 2MB limit, but it seems there was a miscommunication regarding the key coincidence, where `fetchCache` is a flag indicating that the method is called from fetch, rather than indicating that the `FetchCache` Provider is currently being used. We do not use Vercel, and as I understand it, we do not have the opportunity to use this functionality. In any case, it is more important for us to increase the limits, and in some cases, using a file storage is even preferable. ### How? I have created a flag that determines whether the use of `FetchCache` is possible at least in theory - if no custom provider is passed, and additionally configured it so that it is not an implementation of `FetchCache` as a protection against special individuals (*like me :)*). If everything is fine, I will write proper tests. Also, I would like to recommend making `FileSystemCache` public (_i.e. support it as public functionality_) so that it can be imported and extended or simply used to fix only it. Fixes vercel#48324 (partially) --------- Co-authored-by: JJ Kasper <jj@jjsweb.site>
### Fixing a bug I'm sorry, I have no idea how I managed to delete this, as I just copied the code. However, I had to figure out why the tests passed. When I test the running application locally, it works as expected. So, when a route is first used in a running production application in a test, `ctx.fetchCache` is `undefined`. Therefore, the error rule does not trigger on the first request, and the cache is successfully written. This may result in artifacts in FetchCache in Vercel and possibly in other parts of the code. ```ts if ( ctx.fetchCache && // <- Undefined on first request // we don't show this error/warning when a custom cache handler is being used // as it might not have this limit !this.hasCustomCacheHandler && JSON.stringify(data).length > 2 * 1024 * 1024 ) { if (this.dev) { throw new Error(`fetch for over 2MB of data can not be cached`) } return } ``` I'm 95% sure that this is a bug and it shouldn't work like this. I'll look into this later and if there is an error, I'll put it into a task and try to figure it out later. Unfortunately, the [test](https://github.com/vordgi/next.js/blob/7e028fb6d8598cfcca8de514e4608374f931c973/test/e2e/app-dir/app-static/app-static.test.ts#L3080) from [previous PR](vercel#59976) is not working yet, although it is correct from my point of view. I think it should be kept and the problem above should be fixed. Co-authored-by: JJ Kasper <jj@jjsweb.site>
Fixing a bug
What?
Disable 2MB limit for custom incrementalCacheHandler
Why?
The limit is necessary because
FetchCache
has a 2MB limit, but it seems there was a miscommunication regarding the key coincidence, wherefetchCache
is a flag indicating that the method is called from fetch, rather than indicating that theFetchCache
Provider is currently being used.We do not use Vercel, and as I understand it, we do not have the opportunity to use this functionality.
In any case, it is more important for us to increase the limits, and in some cases, using a file storage is even preferable.
How?
I have created a flag that determines whether the use of
FetchCache
is possible at least in theory - if no custom provider is passed, and additionally configured it so that it is not an implementation ofFetchCache
as a protection against special individuals (like me :)).If everything is fine, I will write proper tests.
Also, I would like to recommend making
FileSystemCache
public (i.e. support it as public functionality) so that it can be imported and extended or simply used to fix only it.Fixes #48324 (partially)