mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
perf(web): optimize Blob.text and Blob.arrayBuffer (#13981)
This commit is contained in:
parent
bfa4ed92bc
commit
7044bf523b
2 changed files with 20 additions and 12 deletions
|
@ -39,7 +39,7 @@ function benchStats(name, n, t1, t2) {
|
|||
|
||||
function benchB64RtLong() {
|
||||
const input = "long-string".repeat(99999);
|
||||
benchSync("b64_rt_long", 1e2, () => {
|
||||
benchSync("b64_rt_long", 100, () => {
|
||||
atob(btoa(input));
|
||||
});
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ function benchUrlParse() {
|
|||
|
||||
function benchLargeBlobText() {
|
||||
const input = "long-string".repeat(999_999);
|
||||
benchSync("blob_text_large", 3, () => {
|
||||
benchSync("blob_text_large", 100, () => {
|
||||
new Blob([input]).text();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue