From fa3e3b4e4f808ed99fa7359e467b5fb126f9a8ad Mon Sep 17 00:00:00 2001 From: Ori Livneh Date: Tue, 29 Oct 2013 01:35:05 -0700 Subject: [PATCH] mw.loader.store: do one eval per batch, rather than one per module Concatenating module implementations and calling $.globalEval on the result is reproducibly faster for me than calling $.globalEval for each module. Change-Id: I70e5bcedb43cd1331720a8e5e6c52cfeabb41ab7 --- resources/mediawiki/mediawiki.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js index acda5d655a..dfb90ccd9c 100644 --- a/resources/mediawiki/mediawiki.js +++ b/resources/mediawiki/mediawiki.js @@ -1227,7 +1227,7 @@ var mw = ( function ( $, undefined ) { */ work: function () { var reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup, - source, group, g, i, modules, maxVersion, sourceLoadScript, + source, concatSource, group, g, i, modules, maxVersion, sourceLoadScript, currReqBase, currReqBaseLength, moduleMap, l, lastDotIndex, prefix, suffix, bytesAdded, async; @@ -1256,14 +1256,16 @@ var mw = ( function ( $, undefined ) { mw.loader.store.init(); if ( mw.loader.store.enabled ) { + concatSource = []; batch = $.grep( batch, function ( module ) { var source = mw.loader.store.get( module ); if ( source ) { - $.globalEval( source ); - return false; // Don't fetch + concatSource.push( source ); + return false; } - return true; // Fetch + return true; } ); + $.globalEval( concatSource.join( ';' ) ); } // Early exit if there's nothing to load... -- 2.20.1