From 8c5a6fffaf674dfaa6288c98ce88ebeff6d81d7e Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Thu, 14 Sep 2017 19:41:36 +0200 Subject: [PATCH] mw.loader: Use Object.create() instead of $.extend() where possible For cases where we want a variation of an object with some keys added or changed, use native Object.create() to create a plain object that inherits from the other object (without needing to loop and copy each key/value separately). This optimisation only works, of course, if the original object by-reference does not change later. Also remove hasOwn filter from sortQuery, because it must now consider inherited keys as well. This filter was already obsolete given mw.loader already has many unfiltered for-in loops in other places, and just in general doesn't support environments that extend Object.prototype. Change-Id: Ib405e32d4598dfb94629c2596ea0804d1c13e7c0 --- resources/src/mediawiki/mediawiki.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js index 0ae45b54f0..b5224867d2 100644 --- a/resources/src/mediawiki/mediawiki.js +++ b/resources/src/mediawiki/mediawiki.js @@ -1499,9 +1499,7 @@ a = []; for ( key in o ) { - if ( hasOwn.call( o, key ) ) { - a.push( key ); - } + a.push( key ); } a.sort(); for ( key = 0; key < a.length; key++ ) { @@ -1538,10 +1536,9 @@ * @param {string} sourceLoadScript URL of load.php */ function doRequest( moduleMap, currReqBase, sourceLoadScript ) { - var query = $.extend( - { modules: buildModulesString( moduleMap ) }, - currReqBase - ); + // Optimisation: Inherit (Object.create), not copy ($.extend) + var query = Object.create( currReqBase ); + query.modules = buildModulesString( moduleMap ); query = sortQuery( query ); addScript( sourceLoadScript + '?' + $.param( query ) ); } @@ -1630,9 +1627,10 @@ // modules for this group from this source. modules = splits[ source ][ group ]; - currReqBase = $.extend( { - version: getCombinedVersion( modules ) - }, reqBase ); + // Optimisation: Inherit (Object.create), not copy ($.extend) + currReqBase = Object.create( reqBase ); + currReqBase.version = getCombinedVersion( modules ); + // For user modules append a user name to the query string. if ( group === 'user' && mw.config.get( 'wgUserName' ) !== null ) { currReqBase.user = mw.config.get( 'wgUserName' ); -- 2.20.1