mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
beafcf38db
The overhead of Zend_Cache in manifests is too high - we don't need LRU or tags, just somewhere to dump a bunch of data that persists You can replace the class used by defining SS_MANIFESTCACHE to be a class that implements the ManifestCache interface (we can't use the Config system to set this, as it isn't initialised yet).
79 lines
1.8 KiB
PHP
79 lines
1.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* A basic caching interface that manifests use to store data.
|
|
*/
|
|
interface ManifestCache {
|
|
public function __construct($name);
|
|
public function load($key);
|
|
public function save($data, $key);
|
|
public function clear();
|
|
}
|
|
|
|
/**
|
|
* Stores manifest data in files in TEMP_DIR dir on filesystem
|
|
*/
|
|
class ManifestCache_File implements ManifestCache {
|
|
function __construct($name) {
|
|
$this->folder = TEMP_FOLDER.'/'.$name;
|
|
if (!is_dir($this->folder)) mkdir($this->folder);
|
|
}
|
|
|
|
function load($key) {
|
|
$file = $this->folder.'/cache_'.$key;
|
|
return file_exists($file) ? unserialize(file_get_contents($file)) : null;
|
|
}
|
|
|
|
function save($data, $key) {
|
|
$file = $this->folder.'/cache_'.$key;
|
|
file_put_contents($file, serialize($data));
|
|
}
|
|
|
|
function clear() {
|
|
array_map('unlink', glob($this->folder.'/cache_*'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Same as ManifestCache_File, but stores the data as valid PHP which gets included to load
|
|
* This is a bit faster if you have an opcode cache installed, but slower otherwise
|
|
*/
|
|
class ManifestCache_File_PHP extends ManifestCache_File {
|
|
function load($key) {
|
|
global $loaded_manifest;
|
|
$loaded_manifest = null;
|
|
|
|
$file = $this->folder.'/cache_'.$key;
|
|
if (file_exists($file)) include $file;
|
|
|
|
return $loaded_manifest;
|
|
}
|
|
|
|
function save($data, $key) {
|
|
$file = $this->folder.'/cache_'.$key;
|
|
file_put_contents($file, '<?php $loaded_manifest = '.var_export($data, true).';');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stores manifest data in APC.
|
|
* Note: benchmarks seem to indicate this is not particularly faster than _File
|
|
*/
|
|
class ManifestCache_APC implements ManifestCache {
|
|
protected $pre;
|
|
|
|
function __construct($name) {
|
|
$this->pre = $name;
|
|
}
|
|
|
|
function load($key) {
|
|
return apc_fetch($this->pre.$key);
|
|
}
|
|
|
|
function save($data, $key) {
|
|
apc_store($this->pre.$key, $data);
|
|
}
|
|
|
|
function clear() {
|
|
}
|
|
} |