MediaWiki  master
ResourceFileCache.php
Go to the documentation of this file.
1 <?php
30  protected $mCacheWorthy;
31 
32  /* @todo configurable? */
33  const MISS_THRESHOLD = 360; // 6/min * 60 min
34 
40  public static function newFromContext( ResourceLoaderContext $context ) {
41  $cache = new self();
42 
43  if ( $context->getImage() ) {
44  $cache->mType = 'image';
45  } elseif ( $context->getOnly() === 'styles' ) {
46  $cache->mType = 'css';
47  } else {
48  $cache->mType = 'js';
49  }
50  $modules = array_unique( $context->getModules() ); // remove duplicates
51  sort( $modules ); // normalize the order (permutation => combination)
52  $cache->mKey = sha1( $context->getHash() . implode( '|', $modules ) );
53  if ( count( $modules ) == 1 ) {
54  $cache->mCacheWorthy = true; // won't take up much space
55  }
56 
57  return $cache;
58  }
59 
66  public static function useFileCache( ResourceLoaderContext $context ) {
68  if ( !$wgUseFileCache ) {
69  return false;
70  }
71  // Get all query values
72  $queryVals = $context->getRequest()->getValues();
73  foreach ( $queryVals as $query => $val ) {
74  if ( in_array( $query, [ 'modules', 'image', 'variant', 'version', '*' ] ) ) {
75  // Use file cache regardless of the value of this parameter
76  continue; // note: &* added as IE fix
77  } elseif ( $query === 'skin' && $val === $wgDefaultSkin ) {
78  continue;
79  } elseif ( $query === 'lang' && $val === $wgLanguageCode ) {
80  continue;
81  } elseif ( $query === 'only' && in_array( $val, [ 'styles', 'scripts' ] ) ) {
82  continue;
83  } elseif ( $query === 'debug' && $val === 'false' ) {
84  continue;
85  } elseif ( $query === 'format' && $val === 'rasterized' ) {
86  continue;
87  }
88 
89  return false;
90  }
91 
92  return true; // cacheable
93  }
94 
99  protected function cacheDirectory() {
100  return $this->baseCacheDirectory() . '/resources';
101  }
102 
107  public function isCacheWorthy() {
108  if ( $this->mCacheWorthy === null ) {
109  $this->mCacheWorthy = (
110  $this->isCached() || // even stale cache indicates it was cache worthy
111  $this->getMissesRecent() >= self::MISS_THRESHOLD // many misses
112  );
113  }
114 
115  return $this->mCacheWorthy;
116  }
117 }
$context
Definition: load.php:45
baseCacheDirectory()
Get the base file cache directory.
static newFromContext(ResourceLoaderContext $context)
Construct an ResourceFileCache from a context.
$wgLanguageCode
Site language code.
isCached()
Check if the cache file exists.
$modules
$wgUseFileCache
This will cache static pages for non-logged-in users to reduce database traffic on public sites...
ResourceLoader request result caching in the file system.
Base class for data storage in the file system.
$cache
Definition: mcc.php:33
getMissesRecent()
Roughly gets the cache misses in the last hour by unique visitors.
$wgDefaultSkin
Default skin, for new users and anonymous visitors.
static useFileCache(ResourceLoaderContext $context)
Check if an RL request can be cached.
isCacheWorthy()
Item has many recent cache misses.
getHash()
All factors that uniquely identify this request, except &#39;modules&#39;.
Context object that contains information about the state of a specific ResourceLoader web request...
cacheDirectory()
Get the base file cache directory.