diff --git a/packages/static/src/rsc/entry.tsx b/packages/static/src/rsc/entry.tsx index f3361d0..113fe41 100644 --- a/packages/static/src/rsc/entry.tsx +++ b/packages/static/src/rsc/entry.tsx @@ -293,13 +293,12 @@ export async function build() { let appRscStream: ReadableStream; if (ssrEnabled) { - // SSR on: both streams have full tree - rootRscStream = renderToReadableStream({ + // SSR on: render the full tree once and tee the stream — one branch + // for SSR HTML, one for the app RSC payload. Rendering twice would + // execute every server component (and defer()) twice per entry (#147). + [rootRscStream, appRscStream] = renderToReadableStream({ root: {appNode}, - }); - appRscStream = renderToReadableStream({ - root: {appNode}, - }); + }).tee(); } else { // SSR off: root stream has shell, app stream has App only rootRscStream = renderToReadableStream({