MediaWiki REL1_32
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}
$wgLanguageCode
Site language code.
$wgDefaultSkin
Default skin, for new users and anonymous visitors.
$wgUseFileCache
This will cache static pages for non-logged-in users to reduce database traffic on public sites.
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.
ResourceLoader request result caching in the file system.
cacheDirectory()
Get the base file cache directory.
static useFileCache(ResourceLoaderContext $context)
Check if an RL request can be cached.
isCacheWorthy()
Item has many recent cache misses.
static newFromContext(ResourceLoaderContext $context)
Construct an ResourceFileCache from a context.
Object passed around to modules which contains information about the state of a specific loader reque...
do that in ParserLimitReportFormat instead use this to modify the parameters of the image all existing parser cache entries will be invalid To avoid you ll need to handle that somehow(e.g. with the RejectParserCacheValue hook) because MediaWiki won 't do it for you. & $defaults also a ContextSource after deleting those rows but within the same transaction you ll probably need to make sure the header is varied on and they can depend only on the ResourceLoaderContext $context
Definition hooks.txt:2885
null for the local wiki Added should default to null in handler for backwards compatibility add a value to it if you want to add a cookie that have to vary cache options can modify $query
Definition hooks.txt:1656
$cache
Definition mcc.php:33