PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Die Templates, die ich rief

Smarty Template Engine - LogoJeder kennt Smarty - unterstelle ich mal. Ich bin zugegebenermaßen kein großer Freund der Template-Engine. Warum?

  • Smarty ist fett - besteht aus viel zu vielen Dateien
  • Smarty ist langsam - der ganze Kram aus Punkt 1 will ja auch ausgeführt werden ;)
  • Smarty unterstützt Pseudocode - das Schlimmste überhaupt: Statt Logik und Darstellung zu trennen, bietet Smarty die Möglichkeit, Schleifen und Bedingungen im Template zu hinterlegen
  • Smarty kompiliert (fast) - der Pseudocode wird in PHP Code umgewandelt

Den Endhals habe ich ja schon beschrieben. Es ist meiner Meinung nach ein riesen Unfug, Pseudocode in Templates unterzubringen. Ganz klar, es hat natürlich Vorteile. Blödsinn finde ich aber auch, das statt richtigem PHP Code Pseudocode verwendet wird. Einfacher und sicherer wirds dadurch jedenfalls nicht.

Es ist also an der Zeit, Smarty durch ein Leichtgewicht zu ersetzen. Zwei Mini-Frameworks habe ich gefunden, die Smarty gerne ersetzen würden:

Sugar zielt in die selbe Richtung wie Smarty und versucht uns das Leben mit Pseudocode zu versüßen (Sorry für das kleine Wortspiel, konnte ich mir nicht verkneifen ;-) Damit könnte ich schonmal den ersten Kritikpunkt loswerden… Dabei versucht Sugar durch Übersichtlichkeit und Schnelligkeit zu punkten. Es verspricht im Gegensatz zu Smarty

  • einfacher
  • schneller
  • flexibler
  • sicherer und
  • erweiterbarer

zu sein. Sehr ehrenwert. Aber ist das aufgrund des Funktionsumfanges überhaupt möglich, sicherzustellen? Die Erfahrung zeigt, das kleinere Bibliotheken oft sicherer sind als große… Von Performance ganz zu schweigen.

HS Template hat einen biederen Namen. Ich finde, er klingt wie von einem Namen abgeleitet, etwa “Hans Schmitt”, ein Blick auf den Namen der Google-Group zeigt aber, dass es “HighSpeed”-Template abkürzen soll. Auch gut.

Im Wiki findet man ein 10 Minuten Tutorial, das mich auf Anhieb begeistert hat:

  • Das Objekt wird initialisiert mit benutzerdefinierten Pfaden für Templates und Cache
  • Dann wird ein Display-Objekt erzeugt, dass mit dem Template-Bezeichner initialisiert wird
  • Das Display-Objekt wird um Teiltemplates erweitert
  • Dem Display-Objekt werden Variablen zugewiesen
  • Die Ausgabe der Variablen erfolgt durch echte PHP-Kommandos
  • Der Cache ist Verfallsdatum-basiert

Wirklich prima umgesetzt, finde ich, ist die Variablenausgabe. Das Zuweisen von Variablen kennt man von Smarty, der Cache ist ebenfalls nichts besonderes - ist aber trotzdem ausreichend für die meisten Zwecke. Sehr gut ist die Aufteilung in Teil-Templates: So kann man bedingte Ausgaben, die in Smarty mit Conditions gelöst wurden mit schönem PHP Code regeln.

Ich werd mir HS Template bei weiteren Tests mal näher anschauen und Euch auf dem Laufenden halten.

Teile und genieße
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

DrSoong meint dazu:

30. Mai 2007 um 17:41

Ich bin mal neugierig auf deine Ergebnisse, Templates schön und gut aber wenn dadurch die Performance leidet, hat das System das eigentliche Ziel verfehlt.

Der Doc!

timi meint dazu:

30. Mai 2007 um 17:55

Na es heisst hoffentlich nicht umsonst HighSpeed-Template…

Jan meint dazu:

3. Juni 2007 um 00:38

Hey…
Danke für den Artikel.

Ich setze mich gerade auch mal mit HSTemplates auseinander und finde es bisher schön handlich und auch schnell…

Allerdings bekomme ich momentan nicht heraus, wie ich mehrere Templates aneinanderketten kann, z. B. für eine Schleife.

Auch kann ich anscheinend nicht mehrmals die gleiche Templatedatei einbinden, jeweils unter einem anderen Alias… Ich muss immer eine andere Datei einbinden…

DrSoong meint dazu:

9. Juni 2007 um 10:02

Das mit den Schleifen bei HST ist mir auch aufgefallen, Geschwindigkeit in Ehren aber für einige Seiten braucht man doch die Möglichkeit, Blöcke aufzubauen.

Mir sind aber auf phpclasses.org noch andere Template-Engines aufgefallen, werd da mal ein paar durchtesten welche sich für mich eignet. Ansonsten heißt es selbst ist der Mann.

Der Doc!

Buch gesucht, OOP / Templates - Seite 2 - PHP @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe meint dazu:

6. Juli 2007 um 20:24

[...] Die Smarty-Dokumentation habe ich mir durchgelesen, verstehe es soweit auch ganz gut, nur hat mich das hier ziemlisch verunsichert. Smarty = langsam? Will ich ja eigentlich nich unbedingt..ein [...]

Anton Shevchuk meint dazu:

8. Juli 2007 um 19:03

You can visit HSTemplate project homepage on russian and english languages.

tim meint dazu:

9. Juli 2007 um 18:42

Danke für den ausführlichen Artikel. Ich habe beide Template Engines miteinander verglichen und habe mich für HSTemplate entschieden. HSTemplate machte bereits in den Beispielcodes auf der Seite einen guten Eindruck. Allerdings brauchte ich lange, um das System zu verstehen. HSTemplate ist bereits sehr schnell, aber nicht für PHP 5 optimiert. Daher habe ich mich an die Arbeit gemacht und angefangen, die Klasse zu überarbeiten. Zuerst ist mir aufgefallen, dass man das Auslesen gecachter Inhalte optimieren könnte. Diese Stelle habe ich nicht verstanden:

unlink();

fopen(…, ‘at’);

Was bedeutet dieses t? Der Entwickler AntonShevchuk wollte wahrscheinlich ein + schreiben. Diese zwei Zeilen bedeuten anscheinend, dass die Datei gelöscht werden soll und dann wieder neu erstellt wird, um den Inhalt zu schreiben. Man könnte direkt “w” schreiben, sodass die Länge der Datei auf 0 gesetzt wird.
Wenn der Inhalt der Datei ausgegeben werden soll, sollte man readfile() verwenden. Ansonsten sollte man file_get_contents() benutzen, da fopen() + fgets() langsamer ist. Die Klasse ist anscheinend für PHP 4 programmiert (deshalb wurde file_get_contents() anscheinend nicht eingesetzt). Das Initiieren der Klasse über Arrays war mir etwas umständlich, deshalb habe ich die Funktionen setTemplatePath() und setCachePath() eingeführt. Um den Debug Modus zu aktivieren, verwende ich setDebug(true);
Nützliche Funktionen, die man aus anderen Templatesystemen kennt, wie z. B. assigned(), clear(), clearAll() habe ich sowohl für globale Variablen als auch für private eingebaut. Trotz der vielen Änderungen ist die Datei um 5 KB schneller und FasterFox zeigt mir sogar eine Geschwindigkeitssteigerung von 50% an (!). Wenn ich etwas mehr Zeit habe, werde ich den Debug Modus vollständig implementieren und eine Funktion, zum Setzen eines Error-Handlers einbauen (setErrorHandler()). Falls Interesse an der Klasse besteht, werde ich diese, sobald sie fertig ist, Open-Source veröffentlichen. Allerdings weiß leider ich noch nicht, wie es lizenzrechtlich aussieht: Die Klasse basiert in den “Grundzügen” (Konzept) auf HSTemplate. Welche Lizenz muss ich verwenden, wenn ich sie veröffentlichen würde?
Da ich leider mit anderen Projekten beschäftigt bin und eine sehr schnelle Template Engine brauchte, musste ich mich mit HSTemplate notgedrungen beschäftigen und bin mit dem Ergebnis mehr als zufrieden. Da ich in meinen alten Projekten nur Smarty eingesetzt habe, wird es noch einige Zeit in Anspruch nehmen, alles auf HSTemplate umzurüsten.

Gruß
Tim

timi meint dazu:

9. Juli 2007 um 19:43

Hallo Tim,

danke für Deinen ausführlichen Kommentar. Einen Dateimodus ‘at’ gibts in der Tat nicht. Um die Datei neu zu schreiben langt ‘w’, wie Du ja auch schon festgestellt hast. Die Funktion file_get_contents gibts aber schon seit PHP 4.3 …

Wenn Du ein Open Source Projekt bearbeitest und verbesserst, ist es am besten, dem Autor der Klasse Deine modifizierte Version zukommen zu lassen. Er entscheidet dann, welche Änderungen er in das Haupt-Release einfließen lassen möchte. Wenn Deine Version der Klasse entscheidende Vorteile im Gegensatz zu der des Ursprungsautors hat, lohnt es sich die Klasse einem breiteren Publikum vorzustellen und als Download anzubieten.

Wenn Du kein eigenes (oder ein noch sehr junges) Blog hast, kannst Du mir gerne die Klasse(n) mit einer Beschreibung Deiner Veränderungen schicken und wir stellen Sie beim PHP Blogger vor.

Zur Lizenz: Wenn eine GPL-Geschützte Applikation oder Klasse veränderst oder in Deiner Applikation einsetzt, sind sowohl Deine Applikation als auch die Klasse ebenfalls unter die GPL zu setzen. Bei der Applikation gibt es noch ein paar Ausnahmen bei in sich geschlossenen Modulen, aber im Großen und Ganzen ist es so wie beschrieben.

tim meint dazu:

10. Juli 2007 um 15:46

Hallo timi,

danke für die schnelle Antwort.

Leider habe ich keinen eigenen Blog, da mir die Zeit dazu fehlt.
Ich dachte immer, file_get_contents gebe es erst seit PHP 5. Danke für die Info.
Das beste wäre wirklich, den Entwickler von HSTemplate zu kontaktieren und mit ihm alles weitere abzusprechen.
Heute habe ich zufällig im “International PHP Magazine Newsletter” eine Alternative zum Includen (worauf HSTemplate basiert) entdeckt. Interessant sind schon die Performanceunterschiede, die der Entwickler auf seiner Seite darstellt. Die Template Engine “Blitz” ist eine Erweiterung für PHP und somit logischerweise schneller als eine “normale” PHP Klasse. Die Include-Methode schafft auf dem Testrechner ~737 Requests in der Sekunde. Blitz ist um ca. 8% schneller als Includen (höhere Req./s). Sehr interessant ist die Performance von Smarty: Templates mit Smarty sind um ca. 20% (!) langsamer als Includen!
Der Programmierer bezeichnet Blitz als “leistungsfähige Template Engine für sehr große Internetprojekte”. Zu erwähnen ist allerdings, dass die Inhalte NICHT gecacht wurden. Bei aktiviertem Caching dürften die Ergebnisse anders ausfallen.
Da ich nicht gerne externe Extensions wegen Portabilitätsgründen einsetze, werde ich auch weiterhin “include” verwenden, zumal Blitz nur 8% mehr Req./s als “include” hat. Für sehr große Internet Projekte, bei denen es um ms ankommt, sollte man doch abwägen, eine Extension zu verwenden, da in diesem Fall das Script nicht portabel sein muss.
http://alexeyrybak.com/blitz/blitz_en.html

Gruß
Tim

timi meint dazu:

10. Juli 2007 um 15:55

@Tim, danke für den Hinweis - ich schau mir die Extension mal an, klingt interessant…

PHP Blogger: Vergiss Template-Engines! - Ein PHP Blog auf deutsch meint dazu:

6. November 2007 um 12:22

[...] jeder gute Leser des PHP Bloggers. Artikel wie “PHP ist eine Template Engine!“, “Die Templates, die ich rief” und “Bröckchen für Bröckchen” sagen glaube ich [...]

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung