Heim  >  Artikel  >  Backend-Entwicklung  >  Yii Framework Offizieller Leitfaden Serie 30 – Caching: Fragment-Caching

Yii Framework Offizieller Leitfaden Serie 30 – Caching: Fragment-Caching

黄舟
黄舟Original
2017-02-15 09:16:02939Durchsuche



Fragment-Caching bezieht sich auf das Zwischenspeichern eines bestimmten Fragments einer Webseite. Wenn auf einer Seite beispielsweise Jahresumsatzzusammenfassungen in einer Tabelle angezeigt werden, können wir diese Tabelle im Cache speichern und so die Zeit reduzieren, die für die Neugenerierung für jede Anfrage benötigt wird.

Um Fragment-Caching zu verwenden, rufen Sie CController::beginCache() und CController::endCache() im Controller-Ansichtsskript auf. Beide Methoden beginnen und enden einschließlich des Seiteninhalts, der zwischengespeichert wird. Ähnlich wie beim Daten-Caching benötigen wir eine Nummer, um das zwischengespeicherte Fragment zu identifizieren.


...别的HTML内容...
<?php if($this->beginCache($id)) { ?>
...被缓存的内容...
<?php $this->endCache(); } ?>
...别的HTML内容...

Wenn beginCache() oben „false“ zurückgibt, wird der zwischengespeicherte Inhalt automatisch eingefügt place; Andernfalls wird der Inhalt innerhalb der if-Anweisung ausgeführt und zwischengespeichert, wenn endCache() ausgelöst wird.

1. Caching-Optionen

Beim Aufruf von beginCache() können Sie als zweiten Parameter ein Array bestehend aus Caching-Optionen angeben, um den Fragment-Cache anzupassen. Der Einfachheit halber sind die Methoden beginCache() und endCache() tatsächlich Wrapper des Widgets [COutputCache]. Daher können alle Eigenschaften von COutputCache in Cache-Optionen initialisiert werden.

Dauer

Die vielleicht gebräuchlichste Option ist die Dauer, die angibt, wie lange der Inhalt im Cache gültig ist. Es ähnelt dem Ablaufparameter CCache::set(). Der folgende Code speichert Inhaltsausschnitte bis zu einer Stunde lang zwischen:


...其他HTML内容...
<?php if($this->beginCache($id, array('duration'=>3600))) { ?>
...被缓存的内容...
<?php $this->endCache(); } ?>
...其他HTML内容...

Wenn wir keinen Zeitraum festlegen , ist der Standardwert 60, was bedeutet, dass zwischengespeicherte Inhalte nach 60 Sekunden ungültig sind.

Abhängigkeit

Wie das Daten-Caching können auch Inhaltsfragmente Abhängigkeiten aufweisen, wenn sie zwischengespeichert werden. Beispielsweise wird der Inhalt eines Artikels abhängig davon angezeigt, ob der Artikel geändert wurde.

Um eine Abhängigkeit anzugeben, erstellen wir die Abhängigkeitsoption, die ein Objekt sein kann, das ICacheDependency implementiert, oder ein Konfigurationsarray, das zum Generieren von Abhängigkeitsobjekten verwendet werden kann. Der folgende Code gibt an, dass der Fragmentinhalt davon abhängt, ob sich der Wert der Spalte lastModified ändert:


...其他HTML内容...
<?php if($this->beginCache($id, array('dependency'=>array(
        'class'=>'system.caching.dependencies.CDbCacheDependency',
        'sql'=>'SELECT MAX(lastModified) FROM Post')))) { ?>
...被缓存的内容...
<?php $this->endCache(); } ?>
...其他HTML内容...

Variation)

Der zwischengespeicherte Inhalt kann sich je nach einigen Parametern ändern. Beispielsweise ist jedes Profil anders. Der zwischengespeicherte Profilinhalt ändert sich je nach Personen-ID. Dies bedeutet, dass beim Aufruf von beginCache() eine andere ID verwendet wird.

COutputCache verfügt über diese integrierte Funktion, und Programmierer müssen kein Muster schreiben, das den Inhalt basierend auf der ID ändert. Nachfolgend finden Sie eine Zusammenfassung.

  • varyByRoute: Setzen Sie diese Option auf „true“, und der zwischengespeicherte Inhalt ändert sich entsprechend der Route. Daher verfügt jede Controller- und Aktionskombination über einen separaten zwischengespeicherten Inhalt.

  • varyBySession: Setzen Sie diese Option auf „true“ und der zwischengespeicherte Inhalt ändert sich basierend auf der Sitzungs-ID. Daher werden in jeder Benutzersitzung möglicherweise unterschiedliche Inhalte angezeigt, die vom Cache bereitgestellt werden.

  • varyByParam: Legen Sie den Namen im Array dieser Option fest. Der zwischengespeicherte Inhalt ändert sich entsprechend dem Wert des GET-Parameters. Wenn eine Seite beispielsweise Artikelinhalte basierend auf dem GET-Parameter id anzeigt, können wir „varyByParam“ als array('id') angeben, damit wir jeden Artikelinhalt zwischenspeichern können. Ohne solche Änderungen könnten wir nur einen bestimmten Artikel zwischenspeichern.

  • varyByExpression: Durch Festlegen dieser Option auf einen PHP-Ausdruck können wir dafür sorgen, dass der zwischengespeicherte Inhalt entsprechend dem Ergebnis dieses PHP-Ausdrucks variiert wird. Diese Option ist seit Version 1.0 verfügbar. 4.

Anfragetyp

Manchmal möchten wir, dass Fragment-Caching nur für bestimmte Arten von Anfragen aktiviert wird. Damit beispielsweise ein Formular auf einer bestimmten Webseite angezeigt wird, möchten wir nur das ursprünglich angeforderte Formular (über eine GET-Anfrage) zwischenspeichern. Jedes anschließend angezeigte Formular (über eine POST-Anfrage) wird nicht zwischengespeichert, da das Formular möglicherweise Benutzereingaben enthält. Dazu können wir die Option requestTypes angeben:


...其他HTML内容...
<?php if($this->beginCache($id, array('requestTypes'=>array('GET')))) { ?>
...被缓存的内容...
<?php $this->endCache(); } ?>
...其他HTML内容...

2. Nested Caching )

Fragment-Caches können verschachtelt werden. Das heißt, ein Cache-Fragment wird an einen größeren Fragment-Cache angehängt. Kommentare werden beispielsweise im internen Snippet-Cache zwischengespeichert und zusammen mit dem Artikelinhalt im externen Cache zwischengespeichert.


...其他HTML内容...
<?php if($this->beginCache($id1)) { ?>
...外部被缓存内容...
    <?php if($this->beginCache($id2)) { ?>
    ...内部被缓存内容...
    <?php $this->endCache(); } ?>
...外部被缓存内容...
<?php $this->endCache(); } ?>
...其他HTML内容...

Verschachtelter Cache kann verschiedene Cache-Optionen festlegen. Im obigen Beispiel können beispielsweise der interne Cache und der externe Cache auf unterschiedliche Dauerwerte eingestellt werden. Wenn im externen Cache gespeicherte Daten ungültig sind, kann der interne Cache weiterhin gültige interne Fragmente bereitstellen. Das Gegenteil ist jedoch nicht der Fall. Wenn der externe Cache gültige Daten enthält, wird eine zwischengespeicherte Kopie für immer aufbewahrt, auch wenn der Inhalt im internen Cache abgelaufen ist.

Das Obige ist der Inhalt von Yii Framework Official Guide Series 30 – Caching: Fragment Caching. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn