Template-Engines im Vergleich
vlibTemplate, Smarty, TinyButStrong und Twig nebeneinander: Syntax, automatisches Escaping, Wartungsstand, Lernkurve und Laufzeitverhalten – mit einer klaren Empfehlung je Ausgangslage.
Das Wichtigste
- Automatisches Escaping ist das einzige Merkmal mit direkter Sicherheitswirkung. Nur Twig bringt es ab Werk mit.
- Alle vier Engines kompilieren nach PHP. Der Laufzeitunterschied ab dem zweiten Aufruf ist in realen Anwendungen nicht der Engpass.
- Für Bestandsprojekte ist die Wartbarkeit der bestehenden Lösung fast immer wichtiger als der Funktionsumfang einer neuen.
- Bei Office-Vorlagen (DOCX, XLSX) gibt es zu OpenTBS praktisch keine gleichwertige Alternative.
Der Vergleich hilft nur, wenn er die Ausgangslage einbezieht. Für ein leeres Projekt sieht die Antwort anders aus als für ein gewachsenes System mit dreihundert Templates.
Gegenüberstellung
| vlibTemplate | Smarty | TinyButStrong | Twig | |
|---|---|---|---|---|
| Syntax im Template | {VAR} + Kommentar-Blöcke | eigene Sprache {$var} | [feld] in gültigem HTML | eigene Sprache {{ var }} |
| Logik im Template | fast keine | umfangreich | begrenzt | umfangreich |
| Automatisches Escaping | nein | optional (escape_html) | optional (Voreinstellung) | ja, ab Werk |
| Template-Vererbung | nein | ja ({extends}) | nein | ja, ausgereift |
| Kompilierung | ja | ja | ja | ja |
| Ausgabe-Caching | einfach | ausgereift | nein (extern lösen) | über HTTP-Cache |
| Editorunterstützung | keine | vorhanden | gering | sehr gut |
| Office-Vorlagen | nein | nein | ja (OpenTBS) | nein |
| Lernkurve | sehr flach | mittel | flach | mittel |
Das eine Merkmal, das wirklich zählt
Automatisches Escaping ist der einzige Punkt in dieser Tabelle mit direkter Sicherheitswirkung. Ohne es ist jede vergessene Kennzeichnung eine mögliche XSS-Lücke, und “wir denken dran” ist über Jahre und wechselnde Beteiligte keine tragfähige Zusage.
Twig escapet standardmässig. Smarty und TBS können es, wenn man es einschaltet – bei einem Bestandsprojekt ist das ein Durchgang durch alle Templates, weil vorhandene manuelle Escapes dann doppelt greifen. vlibTemplate kann es gar nicht; dort hilft nur ein eigener Wrapper um die Setter.
Laufzeit: der Vergleich, der meist falsch geführt wird
Alle vier Engines übersetzen das Template beim ersten Aufruf in PHP-Code und legen ihn ab. Ab dem zweiten Aufruf läuft also in allen Fällen kompilierter PHP-Code. Die verbleibenden Unterschiede liegen in einem Bereich, der neben einer einzigen Datenbankabfrage verschwindet.
Praktisch relevant sind stattdessen:
- Wird der Kompilat-Cache überhaupt genutzt? Ein nicht beschreibbares
templates_clässt Smarty bei jedem Request neu kompilieren. Das ist der Unterschied, den man misst. - Wie viele Templates werden pro Seite eingebunden? Fünfzig Includes kosten fünfzig Dateizugriffe.
- Wird die Ausgabe gecacht? Das ist eine Grössenordnung mehr als jede Engine-Optimierung.
Empfehlung nach Ausgangslage
Neues Projekt, freie Wahl. Twig. Automatisches Escaping, gute Vererbung, breite Werkzeugunterstützung, und in Symfony oder Drupal ohnehin vorhanden.
Bestandsprojekt mit Smarty. Bleiben. Auf eine aktuelle Smarty-Version heben, escape_html einschalten und die Templates einmal durchgehen. Das ist deutlich weniger Aufwand als eine Migration und bringt den entscheidenden Sicherheitsgewinn.
Bestandsprojekt mit vlibTemplate. Prüfen, ob die Engine auf der Ziel-PHP-Version läuft. Wenn ja: Wrapper mit erzwungenem Escaping einziehen und weiterlaufen lassen. Wenn nein und kein gepflegter Fork existiert: Migration planen – die Templates sind wegen der schlanken Syntax vergleichsweise leicht zu übertragen.
Templates werden von Designern gepflegt. TinyButStrong, wenn die Dateien in visuellen Editoren geöffnet werden sollen. Sonst Twig, dessen Syntax auch von Nicht-Entwicklern schnell gelesen wird.
Dokumentvorlagen für Word oder Excel. OpenTBS. Hier gibt es keine gleichwertige Alternative, und für diesen Zweck lohnt es sich, TBS zusätzlich zur Haupt-Engine einzusetzen.
Sehr kleines Projekt, eine Person. Pures PHP mit alternativer Syntax. Dann aber konsequent jede Ausgabe durch htmlspecialchars – am besten über eine Kurzfunktion, damit es nicht bei jedem <?= eine Entscheidung ist.
Migration realistisch planen
Wer migriert, sollte vorher drei Zahlen kennen: Anzahl der Templates, Anteil mit Bedingungen oder Schleifen, Anzahl eigener Funktionen und Modifier. Reine Platzhalter-Templates lassen sich weitgehend mechanisch übertragen. Templates mit Logik brauchen eine Einzelprüfung, und eigene Modifier müssen in der Zielsyntax nachgebaut werden.
Der Weg, der sich bewährt hat: beide Engines parallel betreiben, neue Seiten in der neuen Engine bauen, alte nur bei ohnehin anstehenden Änderungen übertragen. Und ein festes Enddatum setzen – ohne das bleibt der Zwischenzustand jahrelang bestehen.
Häufige Fragen
Welche Engine ist die schnellste?
Die Frage führt in die Irre. Alle vier kompilieren Templates nach PHP und cachen das Ergebnis; ab dem zweiten Aufruf liegt der Unterschied im Bereich von Mikrosekunden. Die Antwortzeit einer echten Anwendung entsteht in Datenbankabfragen und externen Aufrufen, nicht im Template.
Ist Twig immer die richtige Wahl?
Für neue Projekte in der Regel ja. Für ein Bestandsprojekt mit funktionierender Engine, für Office-Vorlagen und für Teams, die eine andere Syntax seit Jahren beherrschen, gibt es gute Gegenargumente.
Was kostet eine Migration realistisch?
Der Aufwand skaliert mit der Anzahl der Templates und dem Anteil an Logik darin. Als grobe Orientierung: reine Platzhalter-Templates lassen sich weitgehend mechanisch übertragen, Templates mit vielen Bedingungen und eigenen Funktionen brauchen eine Einzelprüfung. Ohne vollständige Abnahme jeder Seite ist die Migration nicht fertig.
Kann ich zwei Engines parallel betreiben?
Technisch ja, und bei einer schrittweisen Migration ist es der übliche Weg: neue Seiten in der neuen Engine, alte laufen weiter. Der Dauerzustand ist es nicht wert – zwei Syntaxen im selben Projekt kosten bei jeder Änderung Aufmerksamkeit.
Weiterlesen
- Template-Engines in PHP: Übersicht
Was eine Engine gegenüber purem PHP bringt, welche Ansätze es gibt und wie du für ein Projekt entscheidest.
- vlibTemplate: Aufbau, Syntax und Beispiele
Platzhalter, Schleifen, Bedingungen und Includes der klassischen Engine - inklusive Hinweisen zum Betrieb auf aktuellen PHP-Versionen.
- Smarty: Grundlagen und typische Muster
Zuweisungen, Modifier, Blöcke und Caching - und wo Smarty in modernen Projekten noch seinen Platz hat.
- TinyButStrong: Templates ohne eigene Sprache
Der Ansatz, HTML unverändert zu lassen und nur Felder zu ersetzen: Blöcke, Datenquellen und der Umgang mit Office-Dateien.