Skip to content

Commit

Permalink
perf(fetch): improve body mixin methods
Browse files Browse the repository at this point in the history
  • Loading branch information
tsctx committed Apr 13, 2024
1 parent 7a94682 commit 02e8b73
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 3 deletions.
24 changes: 24 additions & 0 deletions benchmarks/fetch/body-arraybuffer.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { group, bench, run } from 'mitata'
import { Response } from '../../lib/web/fetch/response.js'

const settings = {
small: 2 << 8,
middle: 2 << 12,
long: 2 << 16
}

for (const [name, length] of Object.entries(settings)) {
const buffer = Buffer.allocUnsafe(length).map(() => (Math.random() * 100) | 0)
group(`${name} (length ${length})`, () => {
bench('Response#arrayBuffer', async () => {
return await new Response(buffer).arrayBuffer()
})

// for comparison
bench('Response#text', async () => {
return await new Response(buffer).text()
})
})
}

await run()
2 changes: 1 addition & 1 deletion lib/web/fetch/body.js
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ async function consumeBody (object, convertBytesToJSValue, instance) {
// 5. If object’s body is null, then run successSteps with an
// empty byte sequence.
if (object[kState].body == null) {
successSteps(new Uint8Array())
successSteps(new Uint8Array(0))
return promise.promise
}

Expand Down
7 changes: 5 additions & 2 deletions lib/web/fetch/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -1069,8 +1069,7 @@ async function fullyReadBody (body, processBody, processBodyError) {

// 5. Read all bytes from reader, given successSteps and errorSteps.
try {
const result = await readAllBytes(reader)
successSteps(result)
successSteps(await readAllBytes(reader))
} catch (e) {
errorSteps(e)
}
Expand Down Expand Up @@ -1128,6 +1127,10 @@ async function readAllBytes (reader) {

if (done) {
// 1. Call successSteps with bytes.
if (bytes.length === 1) {
const buffer = bytes[0]
return Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength)
}
return Buffer.concat(bytes, byteLength)
}

Expand Down

0 comments on commit 02e8b73

Please sign in to comment.