Webworking und Wakeboarding
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.
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.
Dieses ist die Gehirnaussonderung eines Hamburger Webworkers, der ab und zu auch gern mal mit dem Wakeboard durch die Wellen pflügt.
Christian
11. Februar 2009 um 13:39 Uhr
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…?
Christoph
11. Februar 2009 um 13:53 Uhr
Warum die “Haupt-Features” fehlen, habe ich einfach mal hier erklärt:
http://code.google.com/p/serpent-php-template-engine/wiki/MissingDetails
Mir ging es um Geschwindigkeit beim Schreiben, um Übersichtlichkeit der Templates, sowie nette Features wie Template Inheritance, einfache Intergration anderer Template Resourcen usw.
Deinen letzten Satz verstehe ich nicht. Wie kannst du denn ein Framework mit einer TE vergleichen? Diese TE soll doch nur ein Teil des Views sein…
Christian
11. Februar 2009 um 15:09 Uhr
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.
Christoph
11. Februar 2009 um 16:34 Uhr
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”
Internetagentur
26. Februar 2009 um 00:29 Uhr
OK, ich werde mir mal die Template Engine anschauen und vielleicht ist sie ja ganz brauchbar.
Monika
12. Dezember 2009 um 00:21 Uhr
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.
Christoph
13. Dezember 2009 um 09:53 Uhr
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?