Skip to content

Run Server Functions in parallel#94277

Draft
devjiwonchoi wants to merge 2 commits into
canaryfrom
worktree-server-functions
Draft

Run Server Functions in parallel#94277
devjiwonchoi wants to merge 2 commits into
canaryfrom
worktree-server-functions

Conversation

@devjiwonchoi
Copy link
Copy Markdown
Member

@devjiwonchoi devjiwonchoi commented May 31, 2026

This PR enabled parallel invocation of Server Functions from the client under the experimental.parallelServerFunctions flag. This includes Cache Functions ('use cache') as well.

To put certain Functions in sequence, use useActionState.

Current behavior (failed CI): https://github.com/vercel/next.js/actions/runs/26725536820/job/78760169966?pr=94277#step:41:547

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 31, 2026

Stats from current PR

🔴 2 regressions, 2 improvements

Metric Canary PR Change Trend
node_modules Size 508 MB 509 MB 🔴 +879 kB (+0%) ▁▁▁▁▁
Turbo Build Time 5.493s 6.010s 🔴 +517ms (+9%) ▃▁▂▂▆
Turbo Build Time (cached) 5.656s 5.369s 🟢 287ms (-5%) ▅▃▃▃▅
Cold (First Request) 1.404s 1.254s 🟢 150ms (-11%) ▄▃▄▃▅
📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 866ms 813ms ▃▃▆▁▃
Cold (Ready in log) 849ms 788ms ▅▃▅▃▆
Cold (First Request) 1.404s 1.254s 🟢 150ms (-11%) ▄▃▄▃▅
Warm (Listen) 864ms 813ms ▄▂▄▂▄
Warm (Ready in log) 861ms 807ms ▅▃▅▃▇
Warm (First Request) 682ms 625ms ▅▄▆▄▇
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 809ms 810ms █▁███
Cold (Ready in log) 781ms 781ms ▇▁█▇█
Cold (First Request) 3.175s 3.179s ▁▄▄▅▅
Warm (Listen) 810ms 810ms █▁███
Warm (Ready in log) 782ms 780ms ▆▁▇▇█
Warm (First Request) 3.210s 3.198s ▁▃▃▅▆

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 5.493s 6.010s 🔴 +517ms (+9%) ▃▁▂▂▆
Cached Build 5.656s 5.369s 🟢 287ms (-5%) ▅▃▃▃▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 23.759s 23.703s ▂▁▂▁█
Cached Build 23.619s 24.093s ▂▁▁▂█
node_modules Size 508 MB 509 MB 🔴 +879 kB (+0%) ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
0-f-17t-npm6m.js gzip 154 B N/A -
04hm05ar7kldw.js gzip 5.73 kB N/A -
0bedn25rxx6ry.js gzip 159 B N/A -
0cidcrz007rdy.js gzip 65.6 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0dvitrl5zg37g.js gzip 8.82 kB N/A -
0j5l0-of142ip.js gzip 155 B N/A -
0sf7ysou-72zd.js gzip 8.71 kB N/A -
0vqwhjxe60kfh.js gzip 156 B N/A -
0w85ncr0e6v74.js gzip 168 B N/A -
157abun3hwc_s.js gzip 10.3 kB N/A -
1arhay5cu2web.js gzip 71 kB N/A -
1efwdel1m3saz.js gzip 157 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1jpaub6y8xlfr.js gzip 2.3 kB N/A -
1oi4fe_tu_0oa.js gzip 155 B N/A -
1ot0mvscrc_uf.js gzip 233 B N/A -
1rk1el84f2_lz.js gzip 155 B N/A -
2_m3xv2uq3sjc.js gzip 1.46 kB N/A -
24y34mwgrkqp4.js gzip 8.78 kB N/A -
2c-fd4y1zozz8.js gzip 8.79 kB N/A -
2d7416h_xd36x.js gzip 8.71 kB N/A -
2l5rruruo62gi.js gzip 160 B N/A -
2lyuhit6rn8fy.js gzip 9.44 kB N/A -
2q0gr8wfr3jwl.js gzip 8.77 kB N/A -
2qbccqdsdnwql.js gzip 154 B N/A -
2t9e75oz6r0zp.js gzip 8.76 kB N/A -
2tu4ozix-297g.js gzip 7.61 kB N/A -
2uku_olcn15b7.js gzip 8.79 kB N/A -
30r8mm-46bdqy.js gzip 220 B 220 B
340x4rsgf3u0g.js gzip 13.8 kB N/A -
38uju2wk2t_c8.js gzip 155 B N/A -
3c1jdxkzlb8oq.js gzip 12.9 kB N/A -
3inab2jybr4k9.js gzip 450 B N/A -
3jkm5tdjvaf_q.js gzip 13.1 kB N/A -
3mt67agm5wp40.js gzip 10.6 kB N/A -
3npr-wfnuzppc.js gzip 50.5 kB N/A -
3s0n085fubzek.js gzip 151 B N/A -
3saabek4kohwi.js gzip 10 kB N/A -
3taxvavjo16zc.js gzip 155 B N/A -
4189xmby9yu1p.js gzip 13.6 kB N/A -
turbopack-09..1q6n.js gzip 4.23 kB N/A -
turbopack-0y..2ycq.js gzip 4.23 kB N/A -
turbopack-14..556n.js gzip 4.21 kB N/A -
turbopack-1c..o_or.js gzip 4.23 kB N/A -
turbopack-1f..1zsw.js gzip 4.22 kB N/A -
turbopack-1h.._e44.js gzip 4.23 kB N/A -
turbopack-1i..mbwf.js gzip 4.23 kB N/A -
turbopack-1u..rw7p.js gzip 4.23 kB N/A -
turbopack-2e..q3pw.js gzip 4.23 kB N/A -
turbopack-2f..3370.js gzip 4.23 kB N/A -
turbopack-2t..ml7-.js gzip 4.23 kB N/A -
turbopack-2y..zjbl.js gzip 4.23 kB N/A -
turbopack-3e..y1oj.js gzip 4.23 kB N/A -
turbopack-3p..k-ga.js gzip 4.24 kB N/A -
0_i7nqgx23st7.js gzip N/A 10 kB -
00f0ap6s91_yt.js gzip N/A 156 B -
06puhytyxk31p.js gzip N/A 8.82 kB -
0bu428s3duhqp.js gzip N/A 7.61 kB -
0hrtmp9l7nv9o.js gzip N/A 71 kB -
0j42f9zonj0wd.js gzip N/A 13 kB -
0m34gln_kt4fg.js gzip N/A 5.73 kB -
0q7kcqa19pc-e.js gzip N/A 170 B -
0q9d6aecmmvvj.js gzip N/A 155 B -
0xkr3cql3e_qo.js gzip N/A 156 B -
1g3q1ww01thnl.js gzip N/A 2.3 kB -
1hraqxuiymq6v.js gzip N/A 8.79 kB -
1hseqqkair-s7.js gzip N/A 156 B -
1l9un1sl77287.js gzip N/A 1.46 kB -
1zz81w1wsfar9.js gzip N/A 161 B -
20w-xbcqid_3f.js gzip N/A 155 B -
2147zgtf14z-q.js gzip N/A 234 B -
23bz3xsg-5-1s.js gzip N/A 8.71 kB -
26e-5ic-z-8sk.js gzip N/A 155 B -
27441mytv7pbm.js gzip N/A 9.43 kB -
2c96woog6t1vn.js gzip N/A 151 B -
2cjkwjgm1zcfs.js gzip N/A 8.71 kB -
2scd8zaoyb8md.js gzip N/A 8.79 kB -
2st_qs6p_9us0.js gzip N/A 13.1 kB -
2zo2exm1d8qj1.js gzip N/A 13.6 kB -
30oszfu8bgqbc.js gzip N/A 13.9 kB -
31i8h69r3fkr7.js gzip N/A 157 B -
36ftptozjgwiq.js gzip N/A 153 B -
36ud4bsdplc0-.js gzip N/A 50.6 kB -
3ct2-pn95h12a.js gzip N/A 156 B -
3hn75zuxly9az.js gzip N/A 10.3 kB -
3hqh7m128tvsn.js gzip N/A 8.77 kB -
3hqti_t-zy1x4.js gzip N/A 449 B -
3ijp29kw6sok7.js gzip N/A 65.6 kB -
3mnawenie1flm.js gzip N/A 8.76 kB -
3ubsozlu6zs38.js gzip N/A 10.6 kB -
3z96jmnzraxml.js gzip N/A 160 B -
43iwfqjnx1cy_.js gzip N/A 8.78 kB -
turbopack-0_..hwnv.js gzip N/A 4.23 kB -
turbopack-02..irmp.js gzip N/A 4.23 kB -
turbopack-0f..h9b3.js gzip N/A 4.23 kB -
turbopack-0l..q43j.js gzip N/A 4.23 kB -
turbopack-0q..le27.js gzip N/A 4.23 kB -
turbopack-0v..0542.js gzip N/A 4.23 kB -
turbopack-1m..5tsr.js gzip N/A 4.23 kB -
turbopack-1y..jcmj.js gzip N/A 4.23 kB -
turbopack-2b..u1sa.js gzip N/A 4.23 kB -
turbopack-2g.._5pc.js gzip N/A 4.23 kB -
turbopack-2p..cun3.js gzip N/A 4.23 kB -
turbopack-35..b00d.js gzip N/A 4.23 kB -
turbopack-39..88xs.js gzip N/A 4.25 kB -
turbopack-3w..i-ah.js gzip N/A 4.21 kB -
Total 470 kB 470 kB ⚠️ +244 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 728 B 727 B
Total 728 B 727 B ✅ -1 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 433 B 432 B
Total 433 B 432 B ✅ -1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2258-HASH.js gzip 61.7 kB N/A -
2266-HASH.js gzip 4.69 kB N/A -
3317.HASH.js gzip 169 B N/A -
4866-HASH.js gzip 5.64 kB N/A -
9e302639-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.5 kB 59.5 kB
main-app-HASH.js gzip 256 B 254 B
main-HASH.js gzip 39.9 kB 39.9 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
175fd0fd-HASH.js gzip N/A 62.8 kB -
2596-HASH.js gzip N/A 5.63 kB -
34-HASH.js gzip N/A 61.8 kB -
5691.HASH.js gzip N/A 169 B -
9156-HASH.js gzip N/A 4.68 kB -
Total 236 kB 236 kB ⚠️ +97 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 181 B 182 B
css-HASH.js gzip 334 B 332 B
dynamic-HASH.js gzip 1.79 kB 1.81 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 351 B 348 B
hooks-HASH.js gzip 385 B 384 B
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 257 B 259 B
link-HASH.js gzip 2.51 kB 2.52 kB
routerDirect..HASH.js gzip 318 B 319 B
script-HASH.js gzip 387 B 386 B
withRouter-HASH.js gzip 316 B 316 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.97 kB 7.99 kB ⚠️ +19 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 277 kB 272 kB 🟢 5.22 kB (-2%)
Total 404 kB 398 kB ✅ -5.43 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 614 B
middleware-r..fest.js gzip 155 B 155 B
middleware.js gzip 44.3 kB 44.8 kB 🔴 +454 B (+1%)
edge-runtime..pack.js gzip 842 B 842 B
Total 46 kB 46.4 kB ⚠️ +450 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 719 B 717 B
Total 719 B 717 B ✅ -2 B
Build Cache
Canary PR Change
0.pack gzip 4.51 MB 4.5 MB
index.pack gzip 114 kB 115 kB 🔴 +1.15 kB (+1%)
index.pack.old gzip 114 kB 115 kB
Total 4.73 MB 4.73 MB ✅ -1.7 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 352 kB 355 kB 🔴 +2.9 kB (+1%)
app-page-exp..prod.js gzip 196 kB 198 kB 🔴 +2.64 kB (+1%)
app-page-tur...dev.js gzip 352 kB 355 kB 🔴 +2.89 kB (+1%)
app-page-tur..prod.js gzip 196 kB 198 kB 🔴 +2.63 kB (+1%)
app-page-tur...dev.js gzip 348 kB 351 kB 🔴 +2.85 kB (+1%)
app-page-tur..prod.js gzip 194 kB 196 kB 🔴 +2.66 kB (+1%)
app-page.run...dev.js gzip 348 kB 351 kB 🔴 +2.86 kB (+1%)
app-page.run..prod.js gzip 194 kB 196 kB 🔴 +2.65 kB (+1%)
app-route-ex...dev.js gzip 77.5 kB 77.5 kB
app-route-ex..prod.js gzip 52.9 kB 52.9 kB
app-route-tu...dev.js gzip 77.6 kB 77.6 kB
app-route-tu..prod.js gzip 52.9 kB 52.9 kB
app-route-tu...dev.js gzip 77.2 kB 77.2 kB
app-route-tu..prod.js gzip 52.7 kB 52.7 kB
app-route.ru...dev.js gzip 77.1 kB 77.1 kB
app-route.ru..prod.js gzip 52.7 kB 52.7 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 44.3 kB 44.3 kB
pages-api-tu..prod.js gzip 33.8 kB 33.8 kB
pages-api.ru...dev.js gzip 44.3 kB 44.3 kB
pages-api.ru..prod.js gzip 33.7 kB 33.7 kB
pages-turbo....dev.js gzip 53.7 kB 53.7 kB
pages-turbo...prod.js gzip 39.4 kB 39.4 kB
pages.runtim...dev.js gzip 53.6 kB 53.6 kB
pages.runtim..prod.js gzip 39.4 kB 39.4 kB
server.runti..prod.js gzip 63.2 kB 63.2 kB
use-cache-pr...dev.js gzip 70 kB 70 kB
use-cache-pr...dev.js gzip 70 kB 70 kB
use-cache-pr...dev.js gzip 68.4 kB 68.4 kB
use-cache-pr...dev.js gzip 68.3 kB 68.3 kB
Total 3.38 MB 3.4 MB ⚠️ +22.1 kB
📝 Changed Files (11 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-exp..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page.runtime.dev.js
  • app-page.runtime.prod.js
  • pages-api.runtime.dev.js
  • pages.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-exp..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page.runtime.dev.js
failed to diff
app-page.runtime.prod.js
failed to diff
pages-api.runtime.dev.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

server.runtime.prod.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/281b26f139f5293ff9df04789180b2b23ad9aeeb/next

Commit: 281b26f

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 31, 2026

Tests Passed

Commit: 281b26f

@devjiwonchoi devjiwonchoi force-pushed the worktree-server-functions branch 2 times, most recently from d9baa87 to af71b98 Compare May 31, 2026 08:53
@devjiwonchoi devjiwonchoi changed the title feat(experimental): parallel server functions Run Server Functions in parallel May 31, 2026
@devjiwonchoi devjiwonchoi force-pushed the worktree-server-functions branch 3 times, most recently from 1f898ad to 2719c6e Compare May 31, 2026 21:53
@devjiwonchoi devjiwonchoi force-pushed the worktree-server-functions branch from 2719c6e to 281b26f Compare May 31, 2026 22:35
@girishcx07
Copy link
Copy Markdown

I am waiting for this PR to be merged and I have also created the or for abort server functions #94279 so that server functions can be aborted but I don’t know if this aligns or not.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants