Skip to content

Commit d05758f

Browse files
meixgsxa
authored andcommitted
buffer: improve blob read performance
Fix: #42108 PR-URL: #42117Fixes: #42108 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Mestery <mestery@protonmail.com>
1 parent 0413736 commit d05758f

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

‎lib/internal/blob.js‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const {
6565

6666
constkHandle=Symbol('kHandle');
6767
constkState=Symbol('kState');
68+
constkIndex=Symbol('kIndex');
6869
constkType=Symbol('kType');
6970
constkLength=Symbol('kLength');
7071
constkArrayBufferPromise=Symbol('kArrayBufferPromise');
@@ -325,17 +326,17 @@ class Blob {
325326
returnnewlazyReadableStream({
326327
asyncstart(){
327328
this[kState]=awaitself.arrayBuffer();
329+
this[kIndex]=0;
328330
},
329331

330332
pull(controller){
331-
if(this[kState].byteLength<=kMaxChunkSize){
332-
controller.enqueue(newUint8Array(this[kState]));
333+
if(this[kState].byteLength-this[kIndex]<=kMaxChunkSize){
334+
controller.enqueue(newUint8Array(this[kState],this[kIndex]));
333335
controller.close();
334336
this[kState]=undefined;
335337
}else{
336-
constslice=this[kState].slice(0,kMaxChunkSize);
337-
this[kState]=this[kState].slice(kMaxChunkSize);
338-
controller.enqueue(newUint8Array(slice));
338+
controller.enqueue(newUint8Array(this[kState],this[kIndex],kMaxChunkSize));
339+
this[kIndex]+=kMaxChunkSize;
339340
}
340341
}
341342
});

0 commit comments

Comments
 (0)