Caching

Um die Performance zu verbessern, können Views zwischengespeichert werden. Vor diesem Kapitel empfiehlt es sich, das Kapitel über [Thomas, ich brauche da einen Link]Response- und Http-Caching[/Thomas, ich brauche da einen Link] durchzugehen.

  1. Einleitung
  2. Charakteristika
  3. Import-Cache
  4. Cache verwalten

Einleitung

Über ControllerAdapter::assignViewCacheControl() kannst du n2n anweisen, Views zwischenzuspeichern, die mit ControllerAdapter::forward() ausgegeben werden. Mit ControllerAdapter::forwardCache() kannst du eine View aus dem Zwischenspeicher lesen und ausgeben. Dies solltest du wenn möglich vor zeitaufwendigen Datenbank-Abfragen tun.

class ExampleController extends ControllerAdapter {
    
    public function index(ExampleDao $exampleDao) {
        $this->assignViewCacheControl(new \DateInterval('PT30M'));
        
        // if valid cache is available it will be send to response
        if ($this->forwardCache('view\bar.html')) {
            return;
        }
        
        // renew cache
        $items = $exampleDao->getItems();
        $this->forward('view\bar.html', array('items' => $items));
    }
}

forwardCache() gibt true zurück, falls eine gültige zwischengespeicherte Version der View existiert. In diesem Fall kann der Methoden-Aufruf bereits beendet werden. Ansonsten wird die View neu zusammengestellt und zwischengespeichert (in diesem Beispiel für 30 Minuten).

Charakteristika

In den meisten Fällen macht es Sinn, verschiedene Versionen einer View zwischenzuspeichern. Zum Beispiel willst du für jeden Artikel dieselbe View nutzen, dabei hat aber jeder Artikel einen anderen Inhalt. Damit n2n diese Versionen von einander unterscheiden kann, musst du für jede Version Charakteristika definieren. Dies machst du über den zweiten Parameter von ControllerAdapter::assignViewCacheControl(). Pro unterschiedlichen Charakteristika wird eine andere Version der View zwischengespeichert.

    public function doArticle($id, ArticleDao $articleDao) {
        $this->assignViewCacheControl(new \DateInterval('PT30M'), array('id' => $id));
        
        if ($this->forwardCache('view\article.html')) {
            return;
        }
        
        $article = $articleDao->getArticleById($id);
        if (null === $article) {
            throw new PageNotFoundException();
        }
        
        $this->forward('view\article.html', array('article' => $article));
    }

Da sich in diesem Beispiel ein Artikel über die ID eindeutig identifizieren lässt, eignet sich diese als Charakteristikum. Pro ID wird nun eine Version der View zwischengespeichert.

Import-Cache

Views, welche du in anderen Views über $view->import() einbindest, können ebenfalls zwischengespeichert werden. Hierzu benötigst du den Typ n2n\ui\view\ViewCacheControl:

<?php $view->import('view\baz.html', array('param' => $param),
        new ViewCacheControl(new \DateInterval('PT30M'), array('charac' => $charac))) ?>

$view->import() lädt die View baz.html nun aus dem Zwischenspeicher, sollte eine gültigen Version vorhanden sein.

Cache verwalten

Wie man den CacheStore der View bekommt und die php-doc dazu. --> Mit Thomas anschauen.

« View HTML »

comments_title

post_login_to_create

questions_title