3. Juni 2010

Performante Alternative zu PHP Template Engines

3. Juni 2010 - Geschrieben von Martin - 4 Kommentare

Template Engines wie Smarty werden bei vielerlei Projekten eingesetzt, oft auch ohne über die Folgen einer solchen Klasse nachzudenken.

Neben der Teils umständlichen Syntax, welche für Designer oft schwer zu erlernen ist, da sie aus vielerlei komplizierten Konstrukten besteht, sticht der Performanceverlust hervor. Bei jedem Aufruf der Seite, müssen nämlich alle Templates neu geparst werden. In diesem Schritt werden alle zuvor genannten komplizierten Syntaxkonstrukte in PHP Code übersetzt, hier stellt sich die Frage, warum nicht direkt PHP Code verfassen?

Wer jetzt mit dem Argument kommt, PHP Code sei lang und kompliziert, der hat sich getäuscht, denn PHP bietet eine Kurzform aller wichtigen Funktionen und Schleifen, hier ein kurzer Auszug der wichtigsten:

Die Ausgabe einer Variable (ähnlich zu echo), allerdings nur wenn „short tags“ in der php.ini aktiviert sind:

<?=$var?>

Ein einfaches if():

<?php if($var = 'test'): ?>
  Wenn $var test entspricht, dann gib diesen Text aus.
<?php else: ?>
  Ansonsten gib das hier aus.
<?php endif; ?>

Eine foreach() Schleife:

<?php foreach($var as $item): ?>
  Punkt Nummero: <?=$item?>
<?php endforeach; ?>

Wo ist denn nun an dieser Syntax im Vergleich zu Templates Engines wie Smarty ein Problem, Funktionen wie abwechselnde Hervorhebung von Tabellen oder Div’s, kann man ganz leicht selbst schreiben. So könnte die entsprechende Methode in einer Template Klasse aussehen:

class template {
  private static $color;
  public static function highlight($color1, $color2) {
    if(self::$color == $color1) {
      echo $color1; self::$color = $color2;
    } else {
      echo $color2; self::$color = $color1;
    }
  }
}

Und noch Zweifel? Ich glaube weniger! Dies ist eine Ressourcensparende Alternative zu den Allgegenwärtigen Template Engines, vorallem bei einem Einsatz in Hochperformanten und Hochbelasteten Webseiten. Andernfalls, wenn Performance keine Rolle Spielt, kann man getrost auf Smarty und Co. zurückgreifen.

4 Antworten zu “Performante Alternative zu PHP Template Engines”

  1. sebi sagt:

    < ? ?> kann nicht nur bei Ausgaben verwendet werden.
    Außerdem sollen die ShortTags in PHP6 entfernt werden. Alternative: XSLT als Template- und Chaching Engine: http://www.webholics.de/2007/08/14/xslt-als-template-engine-in-php-teil-1/

  2. Martin sagt:

    Short Tags, Safe Mode, was bleibt denn überhaupt in PHP6 erhalten …

    Dieses XSLT sieht nicht schlecht aus, erinnert mich auch irgendwie an eZ Publish, bzw. eZ Components, welche ein ähnliches Template System einsetzten. Werde ich mir auf jeden Fall ansehen, bevor unsere Server auf PHP 6 umgestellt werden.

  3. DerDu sagt:

    Ever heard the word „cache“ ? :-)

  4. Martin sagt:

    Implementing a cache is no problem, but for my services a cache can’t be used, because all page content is fully dynamic and changes completely with every request.

    For static or less changed page a cache is in all cases better than pure smarty ;-) But it’s not the best solution, improving the template engine is more effective than building things around…

Schreibe einen Kommentar