Преглед на файлове

FileLoader: Cache duplicate requests by default. See #12434.

Mr.doob преди 7 години
родител
ревизия
613499d828
променени са 1 файла, в които са добавени 14 реда и са изтрити 19 реда
  1. 14 19
      src/loaders/FileLoader.js

+ 14 - 19
src/loaders/FileLoader.js

@@ -5,7 +5,7 @@
 import { Cache } from './Cache.js';
 import { DefaultLoadingManager } from './LoadingManager.js';
 
-var currentlyLoadingFiles = {};
+var loading = {};
 
 function FileLoader( manager ) {
 
@@ -41,10 +41,11 @@ Object.assign( FileLoader.prototype, {
 
 		}
 
-		// If file is already in process of loading, wait for it to load.
-		if ( currentlyLoadingFiles[ url ] !== undefined ) {
+		// Check if request is duplicate
 
-			currentlyLoadingFiles[ url ].push( function () {
+		if ( loading[ url ] !== undefined ) {
+
+			loading[ url ].push( function () {
 
 				scope.load( url, onLoad, onProgress, onError );
 
@@ -145,14 +146,11 @@ Object.assign( FileLoader.prototype, {
 
 		} else {
 
-			var request = new XMLHttpRequest();
-
-			if ( Cache.enabled ) {
+			// Initialise array for duplicate requests
 
-				// Allow other file loaders to wait and subscribe on this request.
-				currentlyLoadingFiles[ url ] = [];
+			loading[ url ] = [];
 
-			}
+			var request = new XMLHttpRequest();
 
 			request.open( 'GET', url, true );
 
@@ -188,21 +186,18 @@ Object.assign( FileLoader.prototype, {
 
 				}
 
-				if ( Cache.enabled ) {
-
-					var duplicateRequests = currentlyLoadingFiles[ url ];
+				// Clean up duplicate requests.
 
-					delete currentlyLoadingFiles[ url ];
+				var callbacks = loading[ url ];
 
-					// Tell other requests for the same file that the file has finished loading.
-					for ( var i = 0; i < duplicateRequests.length; i ++ ) {
+				for ( var i = 0; i < callbacks.length; i ++ ) {
 
-						duplicateRequests[i]( response );
-
-					}
+					callbacks[ i ]( response );
 
 				}
 
+				delete loading[ url ];
+
 			}, false );
 
 			if ( onProgress !== undefined ) {