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

perf(turbo-tasks): Add a 'local' option to #[turbo_tasks::function(..)] #75259

Merged
merged 1 commit into from
Jan 24, 2025

Conversation

bgw
Copy link
Member

@bgw bgw commented Jan 24, 2025

Allows tasks to be marked as local using #[turbo_tasks::function(local)].

Local tasks are cached only for the lifetime of the nearest non-Local parent caller.

Local tasks do not have a unique task id, and are not shared with the backend. Instead they use the parent task's id and store data in the backend-agnostic manager.

This is useful for functions that have a low cache hit rate. Those functions could be converted to non-task functions, but that would break their function signature. This provides a mechanism for skipping caching without changing the function signature.

Local tasks are already used for argument resolution, this allows other arbitrary functions to be opted-in.

Closes PACK-3819

@bgw bgw requested review from sokra and mischnic January 24, 2025 05:11
@bgw bgw marked this pull request as ready for review January 24, 2025 05:11
@bgw bgw added the CI Bypass Graphite Optimization Ignore Graphite CI optimizations, run the full CI suite. https://graphite.dev/docs/stacking-and-ci label Jan 24, 2025 — with Graphite App
Copy link
Member

@sokra sokra left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a PR description

@bgw bgw force-pushed the bgw/dedupe-this-call branch from 1c943c9 to 347619f Compare January 24, 2025 16:29
@bgw bgw force-pushed the bgw/fn-local-option branch from a7429b6 to 40fd0db Compare January 24, 2025 16:30
@ijjk
Copy link
Member

ijjk commented Jan 24, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js bgw/fn-local-option Change
buildDuration 20.6s 17.6s N/A
buildDurationCached 16.6s 13.9s N/A
nodeModulesSize 419 MB 419 MB
nextStartRea..uration (ms) 455ms 450ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js bgw/fn-local-option Change
5306-HASH.js gzip 54.1 kB 54.1 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 N/A
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 240 B 243 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 0 B 0 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js bgw/fn-local-option 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 bgw/fn-local-option 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 bgw/fn-local-option 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 bgw/fn-local-option Change
index.html gzip 523 B 523 B
link.html gzip 538 B 539 B N/A
withRouter.html gzip 518 B 521 B N/A
Overall change 523 B 523 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js bgw/fn-local-option Change
edge-ssr.js gzip 129 kB 129 kB N/A
page.js gzip 210 kB 210 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js bgw/fn-local-option Change
middleware-b..fest.js gzip 671 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 bgw/fn-local-option 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 378 kB 378 kB
app-page-exp..prod.js gzip 132 kB 132 kB
app-page-tur..prod.js gzip 145 kB 145 kB
app-page-tur..prod.js gzip 141 kB 141 kB
app-page.run...dev.js gzip 365 kB 365 kB
app-page.run..prod.js gzip 128 kB 128 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.49 MB 2.49 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js bgw/fn-local-option Change
0.pack gzip 2.11 MB 2.11 MB N/A
index.pack gzip 75.4 kB 75.9 kB ⚠️ +591 B
Overall change 75.4 kB 75.9 kB ⚠️ +591 B
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: 0c17996

@bgw bgw force-pushed the bgw/dedupe-this-call branch from 347619f to 8439258 Compare January 24, 2025 17:46
@bgw bgw force-pushed the bgw/fn-local-option branch from 40fd0db to 2a987b0 Compare January 24, 2025 17:46
@bgw bgw force-pushed the bgw/dedupe-this-call branch 2 times, most recently from cfe5eb9 to 6d9a1fd Compare January 24, 2025 18:33
@bgw bgw force-pushed the bgw/fn-local-option branch from 2a987b0 to dd12daa Compare January 24, 2025 18:33
@bgw bgw changed the base branch from bgw/dedupe-this-call to graphite-base/75259 January 24, 2025 19:17
@bgw bgw force-pushed the bgw/fn-local-option branch from dd12daa to 51a826a Compare January 24, 2025 19:17
@bgw bgw force-pushed the graphite-base/75259 branch from 6d9a1fd to 66d3b9a Compare January 24, 2025 19:17
@bgw bgw changed the base branch from graphite-base/75259 to canary January 24, 2025 19:18
@bgw bgw force-pushed the bgw/fn-local-option branch 2 times, most recently from 35fc3ed to 0151e49 Compare January 24, 2025 19:24
@ijjk
Copy link
Member

ijjk commented Jan 24, 2025

Tests Passed

@bgw bgw force-pushed the bgw/fn-local-option branch from 0151e49 to 0c17996 Compare January 24, 2025 22:05
@bgw bgw merged commit 7578b8f into canary Jan 24, 2025
133 checks passed
Copy link
Member Author

bgw commented Jan 24, 2025

Merge activity

  • Jan 24, 5:29 PM EST: A user merged this pull request with Graphite.

@bgw bgw deleted the bgw/fn-local-option branch January 24, 2025 22:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI Bypass Graphite Optimization Ignore Graphite CI optimizations, run the full CI suite. https://graphite.dev/docs/stacking-and-ci created-by: Turbopack team PRs by the Turbopack team.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants