浏览代码

Perf: make readline interface creation faster

SukkaW 1 年之前
父节点
当前提交
986cfc8ff4
共有 1 个文件被更改,包括 8 次插入3 次删除
  1. 8 3
      Build/lib/fetch-text-by-line.ts

+ 8 - 3
Build/lib/fetch-text-by-line.ts

@@ -11,9 +11,14 @@ const decoder = new TextDecoder('utf-8');
 async function *createTextLineAsyncIterableFromStreamSource(stream: ReadableStream<Uint8Array>): AsyncIterable<string> {
   let buf = '';
 
-  // @ts-expect-error -- ReadableStream<Uint8Array> should be AsyncIterable<Uint8Array>
-  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') {