Dienstag, 10. Februar 2009

Serpent - PHP Template Engine

Nach jahrelangem Durchforsten des Webs nach guten Template Engines, die leider nicht das boten, was ich benötige, bin ich jetzt endlich meiner Standard-Engine Smarty abtrünnig geworden und habe in den letzten Wochen meine eigene Template Engine umgesetzt: Serpent.

Und, nein, ich finde Smarty ganz und gar nicht schlecht. Ich werde es auch wieder einsetzen, wenn ich das Hauptfeature "template security" brauchen sollte, aber bis dahin werd ich wohl recht glücklich mit meiner Engine, die genau die für mich sinvoll wirkenden Features integriert.

Soeben habe ich die erste beta-Version veröffentlicht und wäre natürlich glücklich, wenn sie jemand mal ausprobieren und sein Feedback posten bzw. in den "Issues" bei Google Code einstellen würde.

Was unterscheidet Serpent von anderen Template Engines?

Es integriert zum einen keine Template-Sicherheit, weil ich sie in den letzten 10 Jahren nicht gebraucht habe. Und zum anderen gibt es kein eingebautes Caching-System, weil das Caching des Outputs in vielen Frameworks über das View des MVCs geregelt wird. Und da eine Template Engine nur EINE Möglichkeit der Ausgabe darstellt (neben XML, JSON, CSV usw.) ist das auch nicht Aufgabe der Engine.

Auf der Haben-Seite steht, dass die Template-Sprache PHP ist, was es natürlich extrem flexibel macht. Damit ist es ähnlich wie Savant3, hat aber die Vorteile, dass es nicht auf short_tags aufbaut, um eine kurze Syntax hinzukriegen.

Desweiteren untersützt Serpent die von Django und Dwoo bekannte Template-Vererbung, die von Smarty entliehende Punkt-Syntax für Arrays, Funktionen-Mapping für weniger Schreibarbeit und Resourcen-Handler, weil Templates ja nicht immer aus dem Dateisystem kommen müssen (beim CMS z.B. auch aus einer Datenbank).
E_STRICT-Kompatibilität, gute Objektorientierung und verdammt gute Performance sind selbstverständlich, oder?!

Um ein genaueres Bild von Serpent zu bekommen, empfehle ich, einen Blick auf die Overview-Seite zu werfen:
http://code.google.com/p/serpent-php-template-engine/wiki/Overview

Dann viel Spaß beim Testen.



Serpent - PHP Template Engine
http://code.google.com/p/serpent-php-template-engine/

6 Kommentare:

  1. Warum dann überhaupt eine eigene Template-Engine, wenn Haupt-Features fehlen und PHP als Template-Sprache eingesetzt wird? Hier wäre es doch nützlicher direkt ein Framework mit (H)MVC-Unterszützung...?

    AntwortenLöschen
  2. Die Google-Code-Seite habe ich gelesen. Ich wollte nur genaueres über die Motivation erfahren, denn Template-Engines gibt es im Überfluss und viele weisen sehr ähnliche Features auf.

    Sofern Funktionen nicht genutzt werden möchten, können diese - falls die Engine gut strukturiert ist - auch deaktiviert werden. Caching beispielsweise muss bei Smarty nicht verwendet werden.

    Der letzte Satz war bewusst nicht zu Ende geführt. Es geht mir lediglich darum, dass Themen wie Wiederverwendung von Templates bereits in guten MVC-Frameworks gelöst sind. Eine Nutzung solcher Frameworks bieten im Vergleich zu "nur" einer Template-Engine erheblich mehr Vorteile (z.B. ein Tool zur effektiven Nutzung von MVC).

    Mir geht es nicht darum das Tool schlecht zu reden, nur sollte in der Software-Entwicklung das Rad zu Gunsten der Evulution nicht zu oft neu erfunden werden. ;-)

    AntwortenLöschen
  3. Na, da stimmen wir ja ganz gut überein. Nur noch fix zu deinen Punkten: :)

    Ja, Caching muss bei Smarty nicht verwendet werden. Ist aber fest in Smarty integriert und wird damit mitgeladen. Soll heißen: Die Ausführungsgeschwindigkeit der Templates ist bei Smarty echt schnell. Aber dummerweise muss ja auch Smarty selbst geladen werden. Und durch die Größe dauert das recht lange und fällt bei traffic-lastigen Seiten leider ziemlich ins Gewicht. :(

    Zu den Frameworks: Diese Template-Engine war genau dafür gedacht, Teil des Views eines MVC-F. zu sein. Auch wir verwenden in der Firma ein Framework, in welches wir beliebig viele TE (nicht nur für HTML) im View einklinken können. Und das auch tun, halt je nach Ausgabe-Zweck.

    Hab auch wirklich nur das integriert, was ich brauche. Streng nach "Extreme Programming" :D

    AntwortenLöschen
  4. OK, ich werde mir mal die Template Engine anschauen und vielleicht ist sie ja ganz brauchbar.

    AntwortenLöschen
  5. Pardon, hab nun 3h mit dem Ding rumgemacht.. und muss in Kürze sagen:

    - schlechte doku
    - zu geringer speed

    ansonsten vom ansatz aber okay gemacht, ich hatte es dann soweit verstanden.
    hätte es auch gern genutzt, aber bei einer ausgabe von "hello world" will ich dann nicht paar sekunden warten müssen.

    AntwortenLöschen
  6. Hi,
    danke für dein Feedback. Zu deinen Punkten:

    - schlechte Doku
    Was fehlt dir? Was müsste anders sein?

    - zu geringer Speed
    Bisher war Serpent bei mir die Engine mit dem größten Speed im Vergleich zu vielen anderen Engines (auf meinem Server unter 10ms). Wenn du ein paar Sekunden warten musst, dürfte das nichts mit Serpent zu tun haben.
    Hast du vielleicht ein Beispielscript, an dem ich das nachvolliehen kann?

    AntwortenLöschen