Preload ResourceLoaderWikiModule::getTitleInfo in OutputPage
This avoids a separate query for each module. Bug: T46362 Change-Id: Ie109a8776cbdcd5928cbb59351f2cf94088c0c95
This commit is contained in:
parent
a8c44660c1
commit
6f8dc27ca2
1 changed files with 15 additions and 2 deletions
|
|
@ -2679,16 +2679,29 @@ class OutputPage extends ContextSource {
|
||||||
// Prepare exempt modules for buildExemptModules()
|
// Prepare exempt modules for buildExemptModules()
|
||||||
$exemptGroups = [ 'site' => [], 'noscript' => [], 'private' => [], 'user' => [] ];
|
$exemptGroups = [ 'site' => [], 'noscript' => [], 'private' => [], 'user' => [] ];
|
||||||
$exemptStates = [];
|
$exemptStates = [];
|
||||||
$moduleStyles = array_filter( $this->getModuleStyles( /*filter*/ true ),
|
$moduleStyles = $this->getModuleStyles( /*filter*/ true );
|
||||||
|
|
||||||
|
// Batch preload getTitleInfo for isKnownEmpty() calls below
|
||||||
|
$exemptModules = array_filter( $moduleStyles,
|
||||||
|
function ( $name ) use ( $rl, &$exemptGroups ) {
|
||||||
|
$module = $rl->getModule( $name );
|
||||||
|
return $module && isset( $exemptGroups[ $module->getGroup() ] );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ResourceLoaderWikiModule::preloadTitleInfo(
|
||||||
|
$context, wfGetDB( DB_REPLICA ), $exemptModules );
|
||||||
|
|
||||||
|
// Filter out modules handled by buildExemptModules()
|
||||||
|
$moduleStyles = array_filter( $moduleStyles,
|
||||||
function ( $name ) use ( $rl, $context, &$exemptGroups, &$exemptStates ) {
|
function ( $name ) use ( $rl, $context, &$exemptGroups, &$exemptStates ) {
|
||||||
$module = $rl->getModule( $name );
|
$module = $rl->getModule( $name );
|
||||||
if ( $module ) {
|
if ( $module ) {
|
||||||
$group = $module->getGroup();
|
|
||||||
if ( $name === 'user.styles' && $this->isUserCssPreview() ) {
|
if ( $name === 'user.styles' && $this->isUserCssPreview() ) {
|
||||||
$exemptStates[$name] = 'ready';
|
$exemptStates[$name] = 'ready';
|
||||||
// Special case in buildExemptModules()
|
// Special case in buildExemptModules()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
$group = $module->getGroup();
|
||||||
if ( isset( $exemptGroups[$group] ) ) {
|
if ( isset( $exemptGroups[$group] ) ) {
|
||||||
$exemptStates[$name] = 'ready';
|
$exemptStates[$name] = 'ready';
|
||||||
if ( !$module->isKnownEmpty( $context ) ) {
|
if ( !$module->isKnownEmpty( $context ) ) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue