-
Notifications
You must be signed in to change notification settings - Fork 27.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
Parallel server action calls #69265
Comments
|
https://x.com/cramforce/status/1733240566954230063 |
The docs mention that only sequential server action calls are supported, so running them in parallel shouldn't be expected. |
I would also agree that it would be very cool to use server actions as an RPC system. There's this other thread: #69265 that mentions:
But I'm not exactly sure what this means. If a server action is pure (only queries for data), there shouldn't be a problem right? If so, it would be nice if there is a way to mark a server action as a "query" and allow it to run parallel to other queries. |
I've been using server actions for queries and it's been a great experience having type safety between frontend and backend, but the sequential nature of them is starting to get slowwww. Would love an option to run them in parallel. Has anyone heard news on this since the CTO's tweet in December 2023? |
Similarly, we've used Server Actions for data fetching due to their RPC nature w/ built-in type-safety. Additional advantages over standard Route Handlers is abstraction away some of the code organization decisions. We don't have to place the Route Handler's I think there's definitely a place for full Route Handlers. I also can concede that there is other functionality that benefits from sequential execution of Server Actions, which some projects may want to keep. It would be nice, however, to either tag a Server Action to not run sequentially or to create a new feature in NextJS with similar syntax to Server Actions but runs in parallel the way Route Handlers do (without requiring all the boilerplate code & code organization that Route Handlers require). Even if this new feature doesn't support the existing features that require Server Actions to remain sequentially executed. Aside: For my team's use-case, I could even understand a decision to limit it to just GET requests, as opposed to Server Action POST requests, and say it can be used for data fetching and is not suggested for mutations. Basically the opposite of intended use for Server Actions, while maintaining the simplicity and elegant DX of Server Actions. |
yes please +1, make this an option or configurable if the default is supposed to be sequential, will be a huge boost to application experience and DX |
I found a solution to this annoying problem and managed to pack it in a little utility: |
I workaround this by returning an obj with a promise (similar to @icflorescu). Like in my server action, I return I think the real problem here is the DX for route handlers is not great, and lots of users see Server Actions as a way to escape that pain w/o using heavyweight frameworks like tRPC. That's probably the real fix here. |
Thank you for the above suggestion, but if |
Link to the code that reproduces this issue
https://github.com/yehonatanyosefi/parallel-routes-example
To Reproduce
Current vs. Expected behavior
Current behavior of nextjs server actions are they are executed in sequential fashion, however there is no flag or option or a config to let them be executed in parallel. Causing them to block some ux. For example for ai image generation, you'd have to wait for the last call to finish before making your next one, causing you to need to wait over 15 seconds before you can even generate more images instead of the Expected behavior of being able to send them in parallel and stream in finished generations by awaiting them.
In the example I sent you can see even though I used Promise.all on 2 promises that each take a second that should be expected take only 1 second together but because of the sequential nature the current behavior is it takes 2.
Provide environment information
Which area(s) are affected? (Select all that apply)
create-next-app, Parallel & Intercepting Routes, Performance
Which stage(s) are affected? (Select all that apply)
next dev (local), Vercel (Deployed)
Additional context
Edit: https://x.com/cramforce/status/1733240566954230063
Above's link to a reply by Vercel's CTO agreeing it should have control if we want it parallel
The text was updated successfully, but these errors were encountered: