MediaWiki REL1_39
ResourceFileCache.php
Go to the documentation of this file.
1<?php
2
28
35 protected $mCacheWorthy;
36
37 /* @todo configurable? */
38 private const MISS_THRESHOLD = 360; // 6/min * 60 min
39
45 public static function newFromContext( RL\Context $context ) {
46 $cache = new self();
47
48 if ( $context->getImage() ) {
49 $cache->mType = 'image';
50 } elseif ( $context->getOnly() === 'styles' ) {
51 $cache->mType = 'css';
52 } else {
53 $cache->mType = 'js';
54 }
55 $modules = array_unique( $context->getModules() ); // remove duplicates
56 sort( $modules ); // normalize the order (permutation => combination)
57 $cache->mKey = sha1( $context->getHash() . implode( '|', $modules ) );
58 if ( count( $modules ) == 1 ) {
59 $cache->mCacheWorthy = true; // won't take up much space
60 }
61
62 return $cache;
63 }
64
71 public static function useFileCache( RL\Context $context ) {
72 $mainConfig = MediaWikiServices::getInstance()->getMainConfig();
73 $useFileCache = $mainConfig->get( MainConfigNames::UseFileCache );
74 $defaultSkin = $mainConfig->get( MainConfigNames::DefaultSkin );
75 $languageCode = $mainConfig->get( MainConfigNames::LanguageCode );
76 if ( !$useFileCache ) {
77 return false;
78 }
79 // Get all query values
80 $queryVals = $context->getRequest()->getValues();
81 foreach ( $queryVals as $query => $val ) {
82 if ( in_array( $query, [ 'modules', 'image', 'variant', 'version' ] ) ) {
83 // Use file cache regardless of the value of this parameter
84 continue;
85 } elseif ( $query === 'skin' && $val === $defaultSkin ) {
86 continue;
87 } elseif ( $query === 'lang' && $val === $languageCode ) {
88 continue;
89 } elseif ( $query === 'only' && in_array( $val, [ 'styles', 'scripts' ] ) ) {
90 continue;
91 } elseif ( $query === 'debug' && $val === 'false' ) {
92 continue;
93 } elseif ( $query === 'format' && $val === 'rasterized' ) {
94 continue;
95 }
96
97 return false;
98 }
99
100 return true; // cacheable
101 }
102
107 protected function cacheDirectory() {
108 return $this->baseCacheDirectory() . '/resources';
109 }
110
115 public function isCacheWorthy() {
116 if ( $this->mCacheWorthy === null ) {
117 $this->mCacheWorthy = (
118 $this->isCached() || // even stale cache indicates it was cache worthy
119 $this->getMissesRecent() >= self::MISS_THRESHOLD // many misses
120 );
121 }
122
123 return $this->mCacheWorthy;
124 }
125}
Base class for data storage in the file system.
getMissesRecent()
Roughly gets the cache misses in the last hour by unique visitors.
baseCacheDirectory()
Get the base file cache directory.
isCached()
Check if the cache file exists.
A class containing constants representing the names of configuration variables.
Service locator for MediaWiki core services.
ResourceLoader request result caching in the file system.
cacheDirectory()
Get the base file cache directory.
static useFileCache(RL\Context $context)
Check if an RL request can be cached.
static newFromContext(RL\Context $context)
Construct an ResourceFileCache from a context.
isCacheWorthy()
Item has many recent cache misses.
$cache
Definition mcc.php:33