From: Krinkle Date: Wed, 21 Sep 2016 18:39:25 +0000 (+0000) Subject: Revert "resourceloader: Make cache-eval in mw.loader.work asynchronous" X-Git-Tag: 1.31.0-rc.0~5348^2 X-Git-Url: https://git.cyclocoop.org/%7B%24admin_url%7Dcompta/operations/modifier.php?a=commitdiff_plain;h=c250cb87c2f8b6e27e70c2ca2f664430508a482d;p=lhc%2Fweb%2Fwiklou.git Revert "resourceloader: Make cache-eval in mw.loader.work asynchronous" This reverts commit 482ad8d9fb2e8273cefc4a5a557604b093944c8b. Change-Id: Ic31463313b5a6d9720f0a5e036bb7200d3340021 --- diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js index 122f232736..dd31e14ed4 100644 --- a/resources/src/mediawiki/mediawiki.js +++ b/resources/src/mediawiki/mediawiki.js @@ -1667,34 +1667,6 @@ } } - /** - * Evaluate a batch of load.php responses retrieved from mw.loader.store. - * - * @private - * @param {string[]} implementations Array containing pieces of JavaScript code in the - * form of calls to mw.loader#implement(). - * @param {Function} cb Callback in case of failure - * @param {Error} cb.err - */ - function batchEval( implementations, cb ) { - if ( !implementations.length ) { - return; - } - mw.requestIdleCallback( function iterate( deadline ) { - while ( implementations[ 0 ] && deadline.timeRemaining() > 5 ) { - try { - $.globalEval( implementations.shift() ); - } catch ( err ) { - cb( err ); - return; - } - } - if ( implementations[ 0 ] ) { - mw.requestIdleCallback( iterate ); - } - } ); - } - /* Public Members */ return { /** @@ -1719,7 +1691,7 @@ * @protected */ work: function () { - var q, batch, implementations, sourceModules; + var q, batch, concatSource, origBatch; batch = []; @@ -1749,35 +1721,39 @@ mw.loader.store.init(); if ( mw.loader.store.enabled ) { - implementations = []; - sourceModules = []; + concatSource = []; + origBatch = batch; batch = $.grep( batch, function ( module ) { - var implementation = mw.loader.store.get( module ); - if ( implementation ) { - implementations.push( implementation ); - sourceModules.push( module ); + var source = mw.loader.store.get( module ); + if ( source ) { + concatSource.push( source ); return false; } return true; } ); - batchEval( implementations, function ( err ) { + try { + $.globalEval( concatSource.join( ';' ) ); + } catch ( err ) { // Not good, the cached mw.loader.implement calls failed! This should // never happen, barring ResourceLoader bugs, browser bugs and PEBKACs. // Depending on how corrupt the string is, it is likely that some // modules' implement() succeeded while the ones after the error will // never run and leave their modules in the 'loading' state forever. + // Since this is an error not caused by an individual module but by // something that infected the implement call itself, don't take any // risks and clear everything in this cache. mw.loader.store.clear(); + // Re-add the ones still pending back to the batch and let the server + // repopulate these modules to the cache. + // This means that at most one module will be useless (the one that had + // the error) instead of all of them. mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } ); - - // Re-add the failed ones that are still pending back to the batch - var failed = $.grep( sourceModules, function ( module ) { + origBatch = $.grep( origBatch, function ( module ) { return registry[ module ].state === 'loading'; } ); - batchRequest( failed ); - } ); + batch = batch.concat( origBatch ); + } } batchRequest( batch );