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