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.