Dynamische Inhalte und Cache kombinieren

12.12.2012

Auch in Seiten mit aktivem Cache können dynamische Inhalte über PHP generiert werden. So lassen sich statische Inhalte mit personalisierten dynamischen Daten kombinieren.

Während nicht personalisierte Seiten in den meisten Fällen vollständig im Cache hinterlegt werden können, kommt der Cache bei personalisierten Daten, wie z.B. einem Web-Shop oder einem Kundenportal nicht in Frage. 

In diesem Fall vollständig auf die Cache Funktion zu verzichten, bedeutet allerdings ggf. einen enormen Performance-Verlust, da alle Inhalte dynamisch generiert werden müssen. Die Performance-Unterschiede werden hier gut sichtbar.

Einzelne Bereiche vom Cache ausschließen

Will man bei einem Shop z.B. alle Inhalte cachen, um schnelle Zugriffszeiten zu ermöglichen, muss aber dennoch personalisierte Daten, wie z.B. den Warenkorb anzeigen, kann man eben diesen Bereich vom Cache ausschließen.

Das für die Anzeige des Warenkorbes zuständige PHP-Skript wird dazu in einem wsl:php Bereich mit dem Attribut execution="post" eingebettet.

In diesem Fall wird das Script selbst unausgeführt gecacht und bei jedem Seitenaufruf ausgeführt. Während alle sonstigen Inhalte also statisch ausgeliefert werden, muss lediglich der dynamische Bereich jedes mal ausgeführt werden.

Abfrage, ob PHP dynamisch oder statisch eingebunden werden soll

<xsl:choose>
  <xsl:when test="wd:fragment[@id = 'execution']/text() = 'post'">
    <wsl:php execution="post">
      <xsl:copy-of select="wd:fragment[@id = 'text']/text()|wd:fragment[@id = 'text']/*"/>
    </wsl:php>
  </xsl:when>
  <xsl:otherwise>
    <wsl:php>
      <xsl:copy-of select="wd:fragment[@id = 'text']/text()|wd:fragment[@id = 'text']/*"/>
    </wsl:php>
  </xsl:otherwise>  
</xsl:choose>

Die Einstellung zum dynamischen Einbinden in Kombination mit dem Cache kann über folgende Anweisung im Quelltext des Elementes erfolgen.

Einstellung im PHP-Element, dass PHP ohne Cache ausgeführt werden soll

<wd:fragment id="execution" type="char.default">post</wd:fragment>

Da in den meisten Fällen nur wenige Bereich dynamisch gehalten werden müssen, erreicht man mit dem partiellen Cache eine deutliche Performance-Steigerung gegenüber vollständig dynamischen Seiten ohne auf dynamische Inhalte, wie z.B. personalisierte Daten verzichten zu  müssen.


Twitter
RSS-Feed