MediaWiki  master
LocalisationCacheBulkLoad.php
Go to the documentation of this file.
1 <?php
29 
34  private $fileCache = [];
35 
41  private $mruLangs = [];
42 
46  private $maxLoadedLangs = 10;
47 
53  protected function readPHPFile( $fileName, $fileType ) {
54  $serialize = $fileType === 'core';
55  if ( !isset( $this->fileCache[$fileName][$fileType] ) ) {
56  $data = parent::readPHPFile( $fileName, $fileType );
57 
58  if ( $serialize ) {
59  $encData = serialize( $data );
60  } else {
61  $encData = $data;
62  }
63 
64  $this->fileCache[$fileName][$fileType] = $encData;
65 
66  return $data;
67  } elseif ( $serialize ) {
68  return unserialize( $this->fileCache[$fileName][$fileType] );
69  } else {
70  return $this->fileCache[$fileName][$fileType];
71  }
72  }
73 
79  public function getItem( $code, $key ) {
80  unset( $this->mruLangs[$code] );
81  $this->mruLangs[$code] = true;
82 
83  return parent::getItem( $code, $key );
84  }
85 
92  public function getSubitem( $code, $key, $subkey ) {
93  unset( $this->mruLangs[$code] );
94  $this->mruLangs[$code] = true;
95 
96  return parent::getSubitem( $code, $key, $subkey );
97  }
98 
102  public function recache( $code ) {
103  parent::recache( $code );
104  unset( $this->mruLangs[$code] );
105  $this->mruLangs[$code] = true;
106  $this->trimCache();
107  }
108 
112  public function unload( $code ) {
113  unset( $this->mruLangs[$code] );
114  parent::unload( $code );
115  }
116 
120  protected function trimCache() {
121  while ( count( $this->data ) > $this->maxLoadedLangs && count( $this->mruLangs ) ) {
122  $code = array_key_first( $this->mruLangs );
123  wfDebug( __METHOD__ . ": unloading $code" );
124  $this->unload( $code );
125  }
126  }
127 
128 }
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
LocalisationCache optimised for loading many languages at once.
trimCache()
Unload cached languages until there are less than $this->maxLoadedLangs.
readPHPFile( $fileName, $fileType)
Caching for the contents of localisation files.
array< string, array > $data
The cache data.