Convert the ChunkedStreamManager.requestsByChunk property to a Map
				
					
				
			Compared to regular `Object`s, `Map`s have a number of advantageous properties: Of particular importance in this case is the built-in iteration support, and that determining if the structure is empty is easy.
This commit is contained in:
		
							parent
							
								
									17e23ffb33
								
							
						
					
					
						commit
						dda7a5d1b7
					
				@ -320,7 +320,7 @@ class ChunkedStreamManager {
 | 
			
		||||
    this.currRequestId = 0;
 | 
			
		||||
 | 
			
		||||
    this._chunksNeededByRequest = new Map();
 | 
			
		||||
    this.requestsByChunk = Object.create(null);
 | 
			
		||||
    this._requestsByChunk = new Map();
 | 
			
		||||
    this.promisesByRequest = Object.create(null);
 | 
			
		||||
    this.progressiveDataLength = 0;
 | 
			
		||||
    this.aborted = false;
 | 
			
		||||
@ -401,11 +401,14 @@ class ChunkedStreamManager {
 | 
			
		||||
 | 
			
		||||
    const chunksToRequest = [];
 | 
			
		||||
    for (const chunk of chunksNeeded) {
 | 
			
		||||
      if (!(chunk in this.requestsByChunk)) {
 | 
			
		||||
        this.requestsByChunk[chunk] = [];
 | 
			
		||||
      let requestIds = this._requestsByChunk.get(chunk);
 | 
			
		||||
      if (!requestIds) {
 | 
			
		||||
        requestIds = [];
 | 
			
		||||
        this._requestsByChunk.set(chunk, requestIds);
 | 
			
		||||
 | 
			
		||||
        chunksToRequest.push(chunk);
 | 
			
		||||
      }
 | 
			
		||||
      this.requestsByChunk[chunk].push(requestId);
 | 
			
		||||
      requestIds.push(requestId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!chunksToRequest.length) {
 | 
			
		||||
@ -521,8 +524,11 @@ class ChunkedStreamManager {
 | 
			
		||||
    const loadedRequests = [];
 | 
			
		||||
    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
 | 
			
		||||
      // The server might return more chunks than requested.
 | 
			
		||||
      const requestIds = this.requestsByChunk[curChunk] || [];
 | 
			
		||||
      delete this.requestsByChunk[curChunk];
 | 
			
		||||
      const requestIds = this._requestsByChunk.get(curChunk);
 | 
			
		||||
      if (!requestIds) {
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
      this._requestsByChunk.delete(curChunk);
 | 
			
		||||
 | 
			
		||||
      for (const requestId of requestIds) {
 | 
			
		||||
        const chunksNeeded = this._chunksNeededByRequest.get(requestId);
 | 
			
		||||
@ -539,7 +545,7 @@ class ChunkedStreamManager {
 | 
			
		||||
 | 
			
		||||
    // If there are no pending requests, automatically fetch the next
 | 
			
		||||
    // unfetched chunk of the PDF file.
 | 
			
		||||
    if (!this.disableAutoFetch && isEmptyObj(this.requestsByChunk)) {
 | 
			
		||||
    if (!this.disableAutoFetch && this._requestsByChunk.size === 0) {
 | 
			
		||||
      let nextEmptyChunk;
 | 
			
		||||
      if (this.stream.numChunksLoaded === 1) {
 | 
			
		||||
        // This is a special optimization so that after fetching the first
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user