Caches an asset to avoid the cost of loading and dumping.
@author Kris Wallsmith <kris.wallsmith@gmail.com>
Expanded class hierarchy of AssetCache
class AssetCache implements AssetInterface {
private $asset;
private $cache;
public function __construct(AssetInterface $asset, CacheInterface $cache) {
$this->asset = $asset;
$this->cache = $cache;
}
public function ensureFilter(FilterInterface $filter) {
$this->asset
->ensureFilter($filter);
}
public function getFilters() {
return $this->asset
->getFilters();
}
public function clearFilters() {
$this->asset
->clearFilters();
}
public function load(FilterInterface $additionalFilter = null) {
$cacheKey = self::getCacheKey($this->asset, $additionalFilter, 'load');
if ($this->cache
->has($cacheKey)) {
$this->asset
->setContent($this->cache
->get($cacheKey));
return;
}
$this->asset
->load($additionalFilter);
$this->cache
->set($cacheKey, $this->asset
->getContent());
}
public function dump(FilterInterface $additionalFilter = null) {
$cacheKey = self::getCacheKey($this->asset, $additionalFilter, 'dump');
if ($this->cache
->has($cacheKey)) {
return $this->cache
->get($cacheKey);
}
$content = $this->asset
->dump($additionalFilter);
$this->cache
->set($cacheKey, $content);
return $content;
}
public function getContent() {
return $this->asset
->getContent();
}
public function setContent($content) {
$this->asset
->setContent($content);
}
public function getSourceRoot() {
return $this->asset
->getSourceRoot();
}
public function getSourcePath() {
return $this->asset
->getSourcePath();
}
public function getTargetPath() {
return $this->asset
->getTargetPath();
}
public function setTargetPath($targetPath) {
$this->asset
->setTargetPath($targetPath);
}
public function getLastModified() {
return $this->asset
->getLastModified();
}
public function getVars() {
return $this->asset
->getVars();
}
public function setValues(array $values) {
$this->asset
->setValues($values);
}
public function getValues() {
return $this->asset
->getValues();
}
/**
* Returns a cache key for the current asset.
*
* The key is composed of everything but an asset's content:
*
* * source root
* * source path
* * target url
* * last modified
* * filters
*
* @param AssetInterface $asset The asset
* @param FilterInterface $additionalFilter Any additional filter being applied
* @param string $salt Salt for the key
*
* @return string A key for identifying the current asset
*/
private static function getCacheKey(AssetInterface $asset, FilterInterface $additionalFilter = null, $salt = '') {
if ($additionalFilter) {
$asset = clone $asset;
$asset
->ensureFilter($additionalFilter);
}
$cacheKey = $asset
->getSourceRoot();
$cacheKey .= $asset
->getSourcePath();
$cacheKey .= $asset
->getTargetPath();
$cacheKey .= $asset
->getLastModified();
foreach ($asset
->getFilters() as $filter) {
if ($filter instanceof HashableInterface) {
$cacheKey .= $filter
->hash();
}
else {
$cacheKey .= serialize($filter);
}
}
if ($values = $asset
->getValues()) {
asort($values);
$cacheKey .= serialize($values);
}
return md5($cacheKey . $salt);
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AssetCache:: |
public | function | ||
AssetCache:: |
public | function |
Ensures the current asset includes the supplied filter. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns an array of filters currently applied. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Clears all filters from the current asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Loads the asset into memory and applies load filters. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Applies dump filters and returns the asset as a string. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns the loaded content of the current asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Sets the content of the current asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns an absolute path or URL to the source asset's root directory. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns the relative path for the source asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns the URL for the current asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Sets the URL for the current asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns the time the current asset was last modified. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns an array of variable names for this asset. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Sets the values for the asset's variables. Overrides AssetInterface:: |
|
AssetCache:: |
public | function |
Returns the current values for this asset. Overrides AssetInterface:: |
|
AssetCache:: |
private static | function | Returns a cache key for the current asset. | |
AssetCache:: |
private | property | ||
AssetCache:: |
private | property |