$skin = $context->getSkin();
$lang = $context->getLanguage();
- // Get file dependency information
+ // Batched version of ResourceLoaderModule::getFileDependencies
+ $vary = "$skin|$lang";
$res = $dbr->select( 'module_deps', array( 'md_module', 'md_deps' ), array(
'md_module' => $modules,
- 'md_skin' => $skin
+ 'md_skin' => $vary,
), __METHOD__
);
-
- // Set modules' dependencies
+ // Prime in-object cache values for each module
$modulesWithDeps = array();
foreach ( $res as $row ) {
$module = $this->getModule( $row->md_module );
if ( $module ) {
- $module->setFileDependencies( $skin, FormatJson::decode( $row->md_deps, true ) );
+ $module->setFileDependencies( $context, FormatJson::decode( $row->md_deps, true ) );
$modulesWithDeps[] = $row->md_module;
}
}
-
// Register the absence of a dependency row too
foreach ( array_diff( $modules, $modulesWithDeps ) as $name ) {
$module = $this->getModule( $name );
if ( $module ) {
- $this->getModule( $name )->setFileDependencies( $skin, array() );
+ $this->getModule( $name )->setFileDependencies( $context, array() );
}
}
$context
);
// Collect referenced files
- $this->saveFileDependencies( $context->getSkin(), $this->localFileRefs );
+ $this->saveFileDependencies( $context, $this->localFileRefs );
return $styles;
}
}
$files = array_map( array( $this, 'getLocalPath' ), $files );
// File deps need to be treated separately because they're already prefixed
- $files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) );
+ $files = array_merge( $files, $this->getFileDependencies( $context ) );
// Filter out any duplicates from getFileDependencies() and others.
// Most commonly introduced by compileLessFile(), which always includes the
// entry point Less file we already know about.
*
* These are only image files referenced by the module's stylesheet.
*
- * @param string $skin Skin name
+ * @param ResourceLoaderContext $context
* @return array List of files
*/
- protected function getFileDependencies( $skin ) {
- // Try in-object cache first
- if ( isset( $this->fileDeps[$skin] ) ) {
- return $this->fileDeps[$skin];
- }
-
- $dbr = wfGetDB( DB_SLAVE );
- $deps = $dbr->selectField( 'module_deps',
- 'md_deps',
- array(
- 'md_module' => $this->getName(),
- 'md_skin' => $skin,
- ),
- __METHOD__
- );
+ protected function getFileDependencies( ResourceLoaderContext $context ) {
+ $vary = $context->getSkin() . '|' . $context->getLanguage();
- if ( !is_null( $deps ) ) {
- $this->fileDeps[$skin] = self::expandRelativePaths(
- (array)FormatJson::decode( $deps, true )
+ // Try in-object cache first
+ if ( !isset( $this->fileDeps[$vary] ) ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $deps = $dbr->selectField( 'module_deps',
+ 'md_deps',
+ array(
+ 'md_module' => $this->getName(),
+ 'md_skin' => $vary,
+ ),
+ __METHOD__
);
- } else {
- $this->fileDeps[$skin] = array();
- }
- return $this->fileDeps[$skin];
+ if ( !is_null( $deps ) ) {
+ $this->fileDeps[$vary] = self::expandRelativePaths(
+ (array)FormatJson::decode( $deps, true )
+ );
+ } else {
+ $this->fileDeps[$vary] = array();
+ }
+ }
+ return $this->fileDeps[$vary];
}
/**
* @param string $skin Skin name
* @param array $deps Array of file names
*/
- public function setFileDependencies( $skin, $deps ) {
- $this->fileDeps[$skin] = $deps;
+ public function setFileDependencies( ResourceLoaderContext $context, $files ) {
+ $vary = $context->getSkin() . '|' . $context->getLanguage();
+ $this->fileDeps[$vary] = $files;
}
/**
* Set the files this module depends on indirectly for a given skin.
*
* @since 1.26
- * @param string $skin Skin name
+ * @param ResourceLoaderContext $context
* @param array $localFileRefs List of files
*/
- protected function saveFileDependencies( $skin, $localFileRefs ) {
+ protected function saveFileDependencies( ResourceLoaderContext $context, $localFileRefs ) {
// Normalise array
$localFileRefs = array_values( array_unique( $localFileRefs ) );
sort( $localFileRefs );
try {
// If the list has been modified since last time we cached it, update the cache
- if ( $localFileRefs !== $this->getFileDependencies( $skin ) ) {
+ if ( $localFileRefs !== $this->getFileDependencies( $context ) ) {
+ $vary = $context->getSkin() . '|' . $context->getLanguage();
$dbw = wfGetDB( DB_MASTER );
$dbw->replace( 'module_deps',
array( array( 'md_module', 'md_skin' ) ), array(
'md_module' => $this->getName(),
- 'md_skin' => $skin,
+ 'md_skin' => $vary,
// Use relative paths to avoid ghost entries when $IP changes (T111481)
'md_deps' => FormatJson::encode( self::getRelativePaths( $localFileRefs ) ),
)