Radikales Cachen

Was soll man denn nur cachen? Datenbankabfragen? Webservice-Calls? Die Frage habe ich mir glaub schon 100 Mal gestellt.
Mittlerweile bin ich ja der Meinung: Html. Also am besten man cached das komplette Html einer Webseite und gibt das einfach aus. Ja, alles was veränderlich ist (z.B. User eingeloggt), muss dann eben per AJAX aktualisiert werden.
Ich habe das ganze Mithilfe eines Controller-Plugins gelöst, dass, wenn es einen Cache-Eintrag findet, diesen ausgibt und dir Verarbeitung des Skriptes sofort stoppt via exit. Ist leider momentan aufgrund der Architektur des Frontcontrollers nicht anders möglich, zumindest nicht zu diesem frühen Zeitpunkt (vor dem Routing).
Man muss bei dieser Vorgehensweise natürlich wissen, dass natürlich kein weiterer PHP-Code ausgeführt wird. Also kein Tracking oder so.
Dafür ist es verdammt schnell. 😉

[code]
_cache instanceof \Zend_Cache_Core
&& $request instanceof \Zend_Controller_Request_Http
&& $request->isGet()
) {
$cacheEntry = $this->_cache->load(
$this->_getCacheKey(
$request->getRequestUri()));

// check if cache entry is response http object
if ($cacheEntry instanceof \Zend_Controller_Response_Http) {
$cacheEntry->sendResponse();
exit();
}
}

}

/**
* check if to use cache and write to cache if needed
*
* @throws Exception
*/
public function dispatchLoopShutdown() {
// check if to cache
if ($this->_cache instanceof \Zend_Cache_Core) {

// check if config is not set
if (!($this->_config instanceof \Zend_Config)) {
throw new Exception(‚Config has to be set‘);
}

// check against config if to cache
$request = $this->getRequest();
$module = $request->getModuleName();
$controller = $request->getControllerName();
$action = $request->getActionName();

if ($this->_config->__isset($module)
&& $this->_config->get($module)->__isset($controller)
&& $this->_config->get($module)->get($controller)->__isset($action)
) {
$this->_cache->save(
$this->getResponse(),
$this->_getCacheKey(
$request->getRequestUri()));
}
}
}

/* HELPER METHODS */
/**
* generate cache key
*
* @param string $rawCacheKey
* @return string
*/
private function _getCacheKey($rawCacheKey) {
return preg_replace(‚/[^a-zA-Z0-9_]/‘, ‚_‘, $rawCacheKey);
}

/* GETTER AND SETTER */
/**
* get cache
*
* @return \Zend_Cache_Core
*/
public function getCache()
{
return $this->_cache;
}
/**
* set cache
*
* @param \Zend_Cache_Core $cache
*/
public function setCache(\Zend_Cache_Core $cache)
{
$this->_cache = $cache;
}

/**
* get the config
*
* @return \Zend_Config
*/
public function getConfig()
{
return $this->_config;
}
/**
* set config
*
* @param \Zend_Config $config
*/
public function setConfig(\Zend_Config $config)
{
$this->_config = $config;
}

}
[/code]

GD Star Rating
loading...

Kommentar verfassen