From c550dd37e0a29ebb15e0c7e67a53ded85ed8c4ec Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Wed, 6 Apr 2022 14:47:43 +0200 Subject: [PATCH 1/2] refine decodeText --- packages/next/server/node-web-streams-helper.ts | 11 +++++++---- packages/next/server/render.tsx | 6 +++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/next/server/node-web-streams-helper.ts b/packages/next/server/node-web-streams-helper.ts index f4fe2632ed92b94..04de9e57295dd6e 100644 --- a/packages/next/server/node-web-streams-helper.ts +++ b/packages/next/server/node-web-streams-helper.ts @@ -94,6 +94,8 @@ export async function streamToString( stream: ReadableStream ): Promise { const reader = stream.getReader() + const textDecoder = new TextDecoder() + let bufferedString = '' while (true) { @@ -103,7 +105,7 @@ export async function streamToString( return bufferedString } - bufferedString += decodeText(value) + bufferedString += decodeText(value, textDecoder) } } @@ -230,9 +232,10 @@ export function createFlushEffectStream( ): TransformStream { return createTransformStream({ async transform(chunk, controller) { - const extraChunk = await handleFlushEffect() - // those should flush together at once - controller.enqueue(encodeText(extraChunk + decodeText(chunk))) + const flushedChunk = encodeText(await handleFlushEffect()) + + controller.enqueue(flushedChunk) + controller.enqueue(chunk) }, }) } diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index dab009cb73ec8c8..660848c496d409c 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -1461,15 +1461,19 @@ export async function renderToHTML( // If it's a server component with the Node.js runtime, we also // statically generate the page data. let data = '' + const readable = serverComponentsPageDataTransformStream.readable const reader = readable.getReader() + const textDecoder = new TextDecoder() + while (true) { const { done, value } = await reader.read() if (done) { break } - data += decodeText(value) + data += decodeText(value, textDecoder) } + ;(renderOpts as any).pageData = { ...(renderOpts as any).pageData, __flight__: data, From 4dff20133a9b57ad5fd5ce1b72eb00552171043d Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Wed, 6 Apr 2022 14:52:47 +0200 Subject: [PATCH 2/2] remove redundant text encoder --- packages/next/client/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/client/index.tsx b/packages/next/client/index.tsx index 37bde9206f1a7d8..c4ec6dfe7aa51c2 100644 --- a/packages/next/client/index.tsx +++ b/packages/next/client/index.tsx @@ -778,7 +778,7 @@ if (process.env.__NEXT_RSC) { if (serialized) { const readable = new ReadableStream({ start(controller) { - controller.enqueue(new TextEncoder().encode(serialized)) + controller.enqueue(encoder.encode(serialized)) controller.close() }, })