From 986cfc8ff4c39b2c73c452b2eda1082e1c9fe3f2 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Thu, 2 May 2024 18:43:25 +0800 Subject: [PATCH] Perf: make readline interface creation faster --- Build/lib/fetch-text-by-line.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Build/lib/fetch-text-by-line.ts b/Build/lib/fetch-text-by-line.ts index aa8e080d..8ce2dcd8 100644 --- a/Build/lib/fetch-text-by-line.ts +++ b/Build/lib/fetch-text-by-line.ts @@ -11,9 +11,14 @@ const decoder = new TextDecoder('utf-8'); async function *createTextLineAsyncIterableFromStreamSource(stream: ReadableStream): AsyncIterable { let buf = ''; - // @ts-expect-error -- ReadableStream should be AsyncIterable - for await (const chunk of stream) { - const chunkStr = decoder.decode(chunk).replaceAll('\r\n', '\n'); + const reader = stream.getReader(); + + while (true) { + const res = await reader.read(); + if (res.done) { + break; + } + const chunkStr = decoder.decode(res.value).replaceAll('\r\n', '\n'); for (let i = 0, len = chunkStr.length; i < len; i++) { const char = chunkStr[i]; if (char === '\n') {