3 * Contain the ResourceFileCache class
7 class ResourceFileCache
extends FileCacheBase
{
8 protected $mCacheWorthy;
10 /* @TODO: configurable? */
11 const MISS_THRESHOLD
= 360; // 6/min * 60 min
14 * Construct an ResourceFileCache from a context
15 * @param $context ResourceLoaderContext
16 * @return ResourceFileCache
18 public static function newFromContext( ResourceLoaderContext
$context ) {
21 if ( $context->getOnly() === 'styles' ) {
22 $cache->mType
= 'css';
26 $modules = array_unique( $context->getModules() ); // remove duplicates
27 sort( $modules ); // normalize the order (permutation => combination)
28 $cache->mKey
= sha1( $context->getHash() . implode( '|', $modules ) );
29 if ( count( $modules ) == 1 ) {
30 $cache->mCacheWorthy
= true; // won't take up much space
37 * Check if an RL request can be cached.
38 * Caller is responsible for checking if any modules are private.
39 * @param $context ResourceLoaderContext
42 public static function useFileCache( ResourceLoaderContext
$context ) {
43 global $wgUseFileCache, $wgDefaultSkin, $wgLanguageCode;
44 if ( !$wgUseFileCache ) {
47 // Get all query values
48 $queryVals = $context->getRequest()->getValues();
49 foreach ( $queryVals as $query => $val ) {
50 if ( $query === 'modules' ||
$query === 'version' ||
$query === '*' ) {
51 continue; // note: &* added as IE fix
52 } elseif ( $query === 'skin' && $val === $wgDefaultSkin ) {
54 } elseif ( $query === 'lang' && $val === $wgLanguageCode ) {
56 } elseif ( $query === 'only' && in_array( $val, array( 'styles', 'scripts' ) ) ) {
58 } elseif ( $query === 'debug' && $val === 'false' ) {
63 return true; // cacheable
67 * Get the base file cache directory
70 protected function cacheDirectory() {
71 return $this->baseCacheDirectory() . '/resources';
75 * Item has many recent cache misses
78 public function isCacheWorthy() {
79 if ( $this->mCacheWorthy
=== null ) {
80 $this->mCacheWorthy
= (
81 $this->isCached() ||
// even stale cache indicates it was cache worthy
82 $this->getMissesRecent() >= self
::MISS_THRESHOLD
// many misses
85 return $this->mCacheWorthy
;