jenkins-bot has submitted this change and it was merged.

Change subject: resourceloader: Minify per-module instead of per-response
......................................................................


resourceloader: Minify per-module instead of per-response

* Decline to cache minified private modules, because they exist in as many
  variants as there are users, and are unlikely to be cache hits now that we
  use APC.
* Other modules are minified individually, to improve cache hit rate.

Bug: T107377
Change-Id: Id6f5142062d73b5701126724e0fe8264105f7813
---
M includes/resourceloader/ResourceLoader.php
1 file changed, 24 insertions(+), 21 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  Ori.livneh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/resourceloader/ResourceLoader.php 
b/includes/resourceloader/ResourceLoader.php
index 4cec7ef..e2d3990 100644
--- a/includes/resourceloader/ResourceLoader.php
+++ b/includes/resourceloader/ResourceLoader.php
@@ -999,9 +999,13 @@
 
                // Generate output
                $isRaw = false;
+
+               $filter = $context->getOnly() === 'styles' ? 'minify-css' : 
'minify-js';
+
                foreach ( $modules as $name => $module ) {
                        try {
                                $content = $module->getModuleContent( $context 
);
+                               $strContent = '';
 
                                // Append output
                                switch ( $context->getOnly() ) {
@@ -1009,10 +1013,10 @@
                                                $scripts = $content['scripts'];
                                                if ( is_string( $scripts ) ) {
                                                        // Load scripts raw...
-                                                       $out .= $scripts;
+                                                       $strContent = $scripts;
                                                } elseif ( is_array( $scripts ) 
) {
                                                        // ...except when 
$scripts is an array of URLs
-                                                       $out .= 
self::makeLoaderImplementScript( $name, $scripts, array(), array(), array() );
+                                                       $strContent = 
self::makeLoaderImplementScript( $name, $scripts, array(), array(), array() );
                                                }
                                                break;
                                        case 'styles':
@@ -1020,10 +1024,10 @@
                                                // We no longer seperate into 
media, they are all combined now with
                                                // custom media type groups 
into @media .. {} sections as part of the css string.
                                                // Module returns either an 
empty array or a numerical array with css strings.
-                                               $out .= isset( $styles['css'] ) 
? implode( '', $styles['css'] ) : '';
+                                               $strContent = isset( 
$styles['css'] ) ? implode( '', $styles['css'] ) : '';
                                                break;
                                        default:
-                                               $out .= 
self::makeLoaderImplementScript(
+                                               $strContent = 
self::makeLoaderImplementScript(
                                                        $name,
                                                        isset( 
$content['scripts'] ) ? $content['scripts'] : '',
                                                        isset( 
$content['styles'] ) ? $content['styles'] : array(),
@@ -1032,6 +1036,17 @@
                                                );
                                                break;
                                }
+
+                               if ( !$context->getDebug() ) {
+                                       // Don't cache private modules. This is 
especially important in the case
+                                       // of modules which change every time 
they are built, like the embedded
+                                       // user.tokens module (bug T84960).
+                                       $filterOptions = array( 'cache' => ( 
$module->getGroup() !== 'private' ) );
+                                       $strContent = $this->filter( $filter, 
$strContent, $filterOptions );
+                               }
+
+                               $out .= $strContent;
+
                        } catch ( Exception $e ) {
                                MWExceptionHandler::logException( $e );
                                $this->logger->warning( 'Generating module 
package failed: {exception}', array(
@@ -1058,28 +1073,16 @@
 
                        // Set the state of modules we didn't respond to with 
mw.loader.implement
                        if ( count( $states ) ) {
-                               $out .= self::makeLoaderStateScript( $states );
+                               $stateScript = self::makeLoaderStateScript( 
$states );
+                               if ( !$context->getDebug() ) {
+                                       $stateScript = $this->filter( 
'minify-js', $stateScript );
+                               }
+                               $out .= $stateScript;
                        }
                } else {
                        if ( count( $states ) ) {
                                $this->errors[] = 'Problematic modules: ' .
                                        FormatJson::encode( $states, 
ResourceLoader::inDebugMode() );
-                       }
-               }
-
-               $enableFilterCache = true;
-               if ( count( $modules ) === 1 && reset( $modules ) instanceof 
ResourceLoaderUserTokensModule ) {
-                       // If we're building the embedded user.tokens, don't 
cache (T84960)
-                       $enableFilterCache = false;
-               }
-
-               if ( !$context->getDebug() ) {
-                       if ( $context->getOnly() === 'styles' ) {
-                               $out = $this->filter( 'minify-css', $out );
-                       } else {
-                               $out = $this->filter( 'minify-js', $out, array(
-                                       'cache' => $enableFilterCache
-                               ) );
                        }
                }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/242767
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id6f5142062d73b5701126724e0fe8264105f7813
Gerrit-PatchSet: 9
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Ori.livneh <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Ori.livneh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to