From 7044bf523bab3a6da47150a05823dd6571abfd49 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Wed, 16 Mar 2022 19:16:52 +0530 Subject: perf(web): optimize Blob.text and Blob.arrayBuffer (#13981) --- ext/web/09_file.js | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'ext') diff --git a/ext/web/09_file.js b/ext/web/09_file.js index 2117a0835..50cce9004 100644 --- a/ext/web/09_file.js +++ b/ext/web/09_file.js @@ -340,8 +340,22 @@ */ async text() { webidl.assertBranded(this, BlobPrototype); - const buffer = await this.arrayBuffer(); - return core.decode(new Uint8Array(buffer)); + const buffer = await this.#u8Array(this.size); + return core.decode(buffer); + } + + async #u8Array(size) { + const bytes = new Uint8Array(size); + const partIterator = toIterator(this[_parts]); + let offset = 0; + for await (const chunk of partIterator) { + const byteLength = chunk.byteLength; + if (byteLength > 0) { + TypedArrayPrototypeSet(bytes, chunk, offset); + offset += byteLength; + } + } + return bytes; } /** @@ -349,14 +363,8 @@ */ async arrayBuffer() { webidl.assertBranded(this, BlobPrototype); - const stream = this.stream(); - const bytes = new Uint8Array(this.size); - let offset = 0; - for await (const chunk of stream) { - TypedArrayPrototypeSet(bytes, chunk, offset); - offset += chunk.byteLength; - } - return bytes.buffer; + const buf = await this.#u8Array(this.size); + return buf.buffer; } [SymbolFor("Deno.customInspect")](inspect) { -- cgit v1.2.3