-
Notifications
You must be signed in to change notification settings - Fork 27.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
Track use cache
usage
#75007
Track use cache
usage
#75007
Conversation
c8ddb3f
to
f278e64
Compare
f278e64
to
bec67bb
Compare
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
buildDuration | 19.5s | 16.2s | N/A |
buildDurationCached | 15.2s | 13s | N/A |
nodeModulesSize | 418 MB | 418 MB | |
nextStartRea..uration (ms) | 420ms | 423ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
5306-HASH.js gzip | 54 kB | 54 kB | N/A |
8276.HASH.js gzip | 169 B | 168 B | N/A |
8377-HASH.js gzip | 5.46 kB | 5.46 kB | N/A |
bccd1874-HASH.js gzip | 52.9 kB | 52.9 kB | ✓ |
framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
main-app-HASH.js gzip | 240 B | 242 B | N/A |
main-HASH.js gzip | 34.6 kB | 34.6 kB | N/A |
webpack-HASH.js gzip | 1.71 kB | 1.71 kB | N/A |
Overall change | 52.9 kB | 52.9 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
_app-HASH.js gzip | 193 B | 193 B | ✓ |
_error-HASH.js gzip | 193 B | 193 B | ✓ |
amp-HASH.js gzip | 512 B | 510 B | N/A |
css-HASH.js gzip | 343 B | 342 B | N/A |
dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | ✓ |
edge-ssr-HASH.js gzip | 265 B | 265 B | ✓ |
head-HASH.js gzip | 363 B | 362 B | N/A |
hooks-HASH.js gzip | 393 B | 392 B | N/A |
image-HASH.js gzip | 4.59 kB | 4.58 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.35 kB | 2.35 kB | N/A |
routerDirect..HASH.js gzip | 328 B | 328 B | ✓ |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 323 B | 326 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.59 kB | 3.59 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
_buildManifest.js gzip | 748 B | 747 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
index.html gzip | 524 B | 523 B | N/A |
link.html gzip | 540 B | 538 B | N/A |
withRouter.html gzip | 520 B | 520 B | ✓ |
Overall change | 520 B | 520 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
edge-ssr.js gzip | 129 kB | 129 kB | N/A |
page.js gzip | 208 kB | 208 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 670 B | 665 B | N/A |
middleware-r..fest.js gzip | 155 B | 156 B | N/A |
middleware.js gzip | 31.3 kB | 31.3 kB | N/A |
edge-runtime..pack.js gzip | 844 B | 844 B | ✓ |
Overall change | 844 B | 844 B | ✓ |
Next Runtimes
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
274-experime...dev.js gzip | 322 B | 322 B | ✓ |
274.runtime.dev.js gzip | 314 B | 314 B | ✓ |
app-page-exp...dev.js gzip | 375 kB | 375 kB | ✓ |
app-page-exp..prod.js gzip | 130 kB | 130 kB | ✓ |
app-page-tur..prod.js gzip | 143 kB | 143 kB | ✓ |
app-page-tur..prod.js gzip | 139 kB | 139 kB | ✓ |
app-page.run...dev.js gzip | 363 kB | 363 kB | ✓ |
app-page.run..prod.js gzip | 126 kB | 126 kB | ✓ |
app-route-ex...dev.js gzip | 37.6 kB | 37.6 kB | ✓ |
app-route-ex..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
app-route.ru...dev.js gzip | 39.2 kB | 39.2 kB | ✓ |
app-route.ru..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
pages-api-tu..prod.js gzip | 9.69 kB | 9.69 kB | ✓ |
pages-api.ru...dev.js gzip | 11.6 kB | 11.6 kB | ✓ |
pages-api.ru..prod.js gzip | 9.68 kB | 9.68 kB | ✓ |
pages-turbo...prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
pages.runtim...dev.js gzip | 27.7 kB | 27.7 kB | ✓ |
pages.runtim..prod.js gzip | 21.9 kB | 21.9 kB | ✓ |
server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
Overall change | 2.47 MB | 2.47 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js jude/use-cache-tracking-2 | Change | |
---|---|---|---|
0.pack gzip | 2.1 MB | 2.11 MB | |
index.pack gzip | 75.6 kB | 74.8 kB | N/A |
Overall change | 2.1 MB | 2.11 MB |
Diff details
Diff for main-HASH.js
Diff too large to display
bec67bb
to
6b903da
Compare
6b903da
to
7674ab8
Compare
4fcd809
to
31f7de5
Compare
7e8234c
to
9ca84f6
Compare
Tests Passed |
9ca84f6
to
ee90c48
Compare
for (const key in tracker2) { | ||
if (Object.prototype.hasOwnProperty.call(tracker2, key)) { | ||
const typedKey = key as UseCacheTrackerKey | ||
if (mergedTracker[typedKey] !== undefined) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If a component/file that uses use cache
is imported in both a nodejs
page and a edge
page will it be counted twice one from each compilation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use cache
requires dynamicIO, but I saw the error that "runtime" is not compatible with nextConfig.experimental.dynamicIO
. so I assume we don't support edge runtime for use cache
components anymore. Hence, it should not run into this double-counting issue.
To reassure this is the case, #75007 (comment)
be11323
to
a17d90e
Compare
@@ -1937,6 +1939,11 @@ export default async function getBaseWebpackConfig( | |||
].filter<[Feature, boolean]>(Boolean as any) | |||
) | |||
), | |||
!dev && | |||
isNodeServer && |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ijjk to avoid double counting in general, I added this check here to skip tracking edge
stuff.
…usage with `Rc<RefCell<FxHashMap<_, _>>>` (#75534) This is a follow-up to #75007 `DashMap` is needed for situations where you have many threads (or tokio tasks) modifying the same data at the same time. It introduces a lot of memory and CPU overhead to create individually lockable `RwLock` shards. This type of data structure implements `Sync`, indicating that it can be shared between threads. `Rc` is not `Sync` (`Arc` is `Sync`), so wrapping `DashMap` in `Rc` doesn't make a lot of sense: You're paying a pretty high overhead for the ability to share data between threads, and wrapping it in something that does not support sharing data between threads. This visitor code is entirely single-threaded, so just use `Rc<RefCell<FxHashMap>>` instead. `RefCell` is a very cheap single-threaded version of a `Mutex`. `FxHashMap` is just a `HashMap` with the faster `FxHash` algorithm used.
We’re updating the SWC transform to track how the "use cache" directive is used during builds. Each use of "use cache" is counted based on the handler it’s linked to.
By default, "use cache" counts toward a feature called "useCache/default". If a custom handler is defined in the Next.js config (e.g., "custom"), then "use cache: custom" will count toward "useCache/custom".
The build process will collect these counts and combine them across all source files and workers. This data is reported under the NEXT_BUILD_FEATURE_USAGE event, allowing us to filter by "useCache/*" to see how often each cache handler is used.
*Only support webpack prod build for now.
Closes NDX-683