die Template
-Engine Smarty – PHP
von
: cjjer Es wurden einige Änderungen vorgenommen
, um PHP zur Implementierung der Logikschicht und Präsentationsschicht des MVC-Entwicklungsmodells zu verwenden. Es stehen verschiedene Template-Engines zur Auswahl, aber nach der Geburt der offiziellen Engine SMARTY hat sich die Wahl geändert. Konzept und Umsetzung sind durchaus avantgardistisch. In diesem Artikel werden hauptsächlich die unterschiedlichen Eigenschaften von SMARTY im Vergleich zu anderen Template-Engines erläutert, die Installation und Verwendung der Engine kurz vorgestellt und anhand eines kleinen Testfalls die Geschwindigkeit und Benutzerfreundlichkeit von SMARTY und PHPLIBtemplate verglichen.
1. MVC erfordert Vorlagen,
die während des Entwicklungsprozesses der SmallTalk-Sprache zunächst als Modell, Ansicht und Steuerung zusammengefasst wurden. Der Zweck besteht darin, verschiedenen Entwicklungsrollen die Ausführung ihrer jeweiligen Aufgaben zu ermöglichen Projekte. Bei der Entwicklung von Netzwerkanwendungen kann das folgende Diagramm verwendet werden, um die Beziehung zwischen Konzepten darzustellen.
Diese Abbildung zeigt eine einfache WEB-Anwendung. Die Informationen, die der Benutzer im Browser sieht, sind der Inhalt auf dem Datenbankserver, der jedoch zuvor vom Anwendungsserver verarbeitet wurde. Entwickler sind für die Einrichtung von Datenstrukturen, Logik zur Datenverarbeitung und Methoden zur Datendarstellung verantwortlich.
Als CGI 1996 in China populär wurde, waren alle frühen WEB-Programmierer Autodidakten. Es war jedoch nicht schwierig, HTML-Zeilen in PERL zu drucken. Mit der zunehmenden Netzwerkgeschwindigkeit nahm jedoch auch die Seitengröße zu von ursprünglich 20 bis 30 K ist sie um das Zehnfache gestiegen. Beim Schreiben von CGI-Programmen entsteht eine dringende Anforderung: die Trennung von PERL- und HTML-Quellcode. So spiegelt sich der gesellschaftliche Fortschritt in der Arbeitsteilung innerhalb des Entwicklungsteams wider. Da Künstler und Programmierer mit der Arbeit des anderen nicht sehr vertraut sind, müssen sie bei der Zusammenarbeit eine vereinbarte Sprache für die Kommunikation verwenden.
Diese Sprache ist nicht unsere Muttersprache oder Englisch. Der Begriff heißt Vorlage, und die Logik und Darstellung hängen davon ab. Es handelt sich um eine Ausdrucksmethode, die die Eigenschaften von HTML und Skriptsprachen kombiniert. Auf diese Weise kann die Präsentationsschicht die von der Logikschicht verarbeiteten Daten in dem vom Benutzer gewünschten Format anzeigen. Wenn Sie Erfahrung in der MFC-Entwicklung unter der Windows-Plattform haben, sind Sie mit der Kapselung von Document/DocumentTemplate/View auf jeden Fall vertraut. Dies ist ein sehr typisches MVC-Beispiel. Für Webanwendungen denke ich persönlich, dass EJB/Servlets/JSP in J2EE am leistungsstärksten sind, und natürlich gibt es einfache und schöne Strukturen. Eine weitere bekannte Implementierung ist COM/DCOM+ASP. Diese Kombination wird von den meisten Menschen in unserem Land verwendet.
Durch den Vergleich mehrerer MVC-Implementierungen in WEB-Anwendungen können wir ein Konzept über Vorlagen erhalten: eine Reihe von in HTML eingefügten Skripten oder Skript-HTML, durch das eingefügte Inhalte sich ändernde Daten darstellen. Das Folgende ist ein Beispiel einer Vorlagendatei. Nach der Verarbeitung wird diese Vorlage im Browser angezeigt.
Die Verarbeitungsmethode von$greetings
wird vorerst weggelassen und wird später zum Vergleich besprochen.
2. Warum sollten Sie sich für SMARTY entscheiden?
Es stehen viele Template-Engines zur Auswahl, z. B. das erste PHPLIBtemplate und das aufstrebende Fasttemplate. Nach mehreren Upgrades sind sie recht ausgereift und stabil. Wenn Sie mit der Template-Engine, die Sie derzeit haben, sehr zufrieden sind, dann ... lesen Sie bitte weiter. Ich glaube, dass die folgende SMARTY-Einführung für mich als Liebhaber freier Software oder als Entwickler, der nach Effizienz und Eleganz strebt, einigermaßen interessant sein wird.
Neben dem Einfluss persönlicher Vorlieben habe ich immer dazu tendiert, offizielle Standardimplementierungen zu verwenden, wie zum Beispiel die XML-Engine Axis von APACHE. Der Vorteil besteht darin, dass Sie die bestmögliche Kompatibilität erhalten können (z. B. war die Kompatibilität des frühen MFC mit Win3x besser als bei anderen Anwendungsframeworks, und natürlich sind jetzt alle Versionen sehr vollständig). Bevor SMARTY veröffentlicht wurde, habe ich die Integrated Template eXtension in PEAR verwendet. Diese Engine ist nahezu kompatibel mit PHPLIBtemplate und Fasttemplate. Von der Syntax der Vorlage bis zur Verarbeitung der Vorlage wird die Vorlage in den Speicher eingelesen und dann die Funktion parse() aufgerufen, um die voreingestellten Tags durch Daten zu ersetzen.
Mal sehen, wie SMARTY das macht. Stellen Sie nach Erhalt der Anfrage zunächst fest, ob die URL zum ersten Mal angefordert wird. Wenn ja, kompilieren Sie die für die URL erforderliche Vorlagendatei und leiten Sie sie dann um Kompiliert. Sie können eine sofortige Umleitung ohne Neukompilierung vornehmen. Die Standardeinstellung ist, dass die Vorlagendatei geändert wird.
Wie wäre es damit? Kommt es Ihnen bekannt vor? Kommen Sie und denken Sie darüber nach──Ist das nicht das Prinzip von JSP? Tatsächlich scheint diese Art der Kompilierung unglaublich, wenn sie auf einer interpretierten Skript-Engine wie PHP verwendet wird, aber wenn Sie sorgfältig darüber nachdenken, wird JAVA nicht auch von der JVM interpretiert und ausgeführt? Das bedeutet, dass nichts unmöglich, sondern nur unvorstellbar ist.
Nachdem wir nun über JAVA gesprochen haben, möchte ich meine Ansichten zur Zukunft von PHP äußern. Die offizielle PHP-Website gab bekannt, dass die Version PHP 5.0 Ende 2003 veröffentlicht wird. Diese Version verfügt über viele neue Funktionen: wie Ausnahmebehandlung, Namespaces, mehr Objektorientierung usw. Man kann sagen, dass es sich JAVA annähert, und SMARTY ist auch eine der neuen Funktionen, wodurch PHP besser für die Entwicklung großer und mittlerer Projekte geeignet ist. Aber es scheint sich immer weiter von dem Grund zu entfernen, warum ich mich überhaupt dafür entschieden habe – Flexibilität und Benutzerfreundlichkeit. Aber aus Sicht des Lebenszyklus einer Software befindet sich PHP in der Wachstumsphase, und die Vorteile überwiegen für Entwickler, wenn sie ihm mehr Funktionen geben, in der Hoffnung, dass es für kommerzielle Anwendungen geeignet ist. Als treuer PHP-Benutzer möchten Sie doch sicher nicht, dass PHP immer wegen unzureichender Fähigkeiten angeklagt wird, oder?
WARUM SMARTY WÄHLEN, NUR WEIL ES WIE JSP IST? Es gibt sicherlich bessere Gründe. Erstens ist das kompilierte Cache-Skript zusätzlich zu den relativ hohen Kosten für die erste Kompilierung jederzeit verfügbar, solange die Vorlagendatei nicht geändert wird, was eine Menge parse()-Zeit spart Umfangreiche Funktionsbibliotheken wie PHP. Sie können sie direkt verwenden, wenn Sie das Gefühl haben, dass dies nicht ausreicht, z. B. wenn Sie die Funktion zur Seitenanzeige des Datensatzes benötigen, SMARTY verfügt außerdem über starke Erweiterungsmöglichkeiten, die durch Plug-Ins erweitert werden können.
Fakten sagen mehr als Worte. Ich habe ein Testprogramm entworfen und SMARTY und PHPLIBtemplate anhand der beiden Faktoren Geschwindigkeit und Entwicklungsschwierigkeit verglichen. Der Grund, warum ich mich für PHPLIBtemplate entschieden habe, ist, dass es in Patricks Artikel „Auswahl der am besten geeigneten Vorlage in der PHP-Welt“ einen Vergleich zwischen PHPLIB gibt Bei der Konkurrenz zwischen Template und Fasttemplate errang PHPLIBtemplate einen tollen Sieg, der SMARTY einen guten Gegner bescherte. Lassen Sie uns vor dem Testen über die Probleme sprechen, auf die während des Installationsprozesses geachtet werden muss.
3. Mögliche Probleme
Auf der offiziellen Website von SMARTY gibt es ein ausführliches Benutzerhandbuch und Sie können Online-Versionen im HTML- und PDF-Format auswählen. Wir werden hier nicht auf den vorhandenen Inhalt des Handbuchs eingehen, sondern lediglich die Probleme erläutern, die bei der ersten Verwendung auftreten können.
Die erste Frage ist sehr fatal: Sie besagt, dass die benötigte Datei nicht gefunden werden kann? Nicht jeder schreibt Anwendungen gemäß der Standardverzeichnisstruktur von SMARTY. Dies muss manuell angegeben werden. Angenommen, die Verzeichnisstruktur ist wie folgt:
Sie müssen die Verzeichnisstruktur in index.php angeben:
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
Das erste Problem ist gelöst, und dann kommt das zweite: Warum kann die schöne Vorlage, die ich gerade mit Dreamweaver erstellt habe, nicht verwendet werden? Es liegt nicht daran, dass mit der Vorlagendatei etwas nicht stimmt, sondern daran, dass das Standard-Tag-Trennzeichen von SMARTY {} ist und leider Javascript dieses Tag definitiv enthält. Glücklicherweise können wir jedes beliebige Zeichen als Trennzeichen verwenden, plus diese beiden Sätze:
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
Jetzt ist die Installation im Grunde kein Problem.
4. Kontrast und Analogie
Denken Sie zunächst über das Design des Tests nach. Der wichtigste Beurteilungsfaktor ist natürlich die Geschwindigkeit. Für den Geschwindigkeitstest wurde ein arithmetisches Mittel verwendet. Wiederholen Sie die Seitengenerierung N-mal auf der Testseite und vergleichen Sie dann die Gesamtzeit für die Seitengenerierung. Ein weiterer wichtiger Faktor ist die Benutzerfreundlichkeit (im Hinblick auf die Skalierbarkeit besteht keine Notwendigkeit, die Ergebnisse zu vergleichen), sodass die verwendete Vorlage nicht zu klein sein darf. Ich verwende die Seite meiner persönlichen Homepage, eine mit Firework+Dreamweaver generierte HTML-Datei, etwa 7 KB groß. Die Variableneinstellungen übernehmen auch die am häufigsten verwendeten Blöcke, die in der PHPLIB-Vorlage als Blöcke und in SMARTY als Abschnitte bezeichnet werden. Unterschätzen Sie nicht den Unterschied bei den Namen. Die Benutzerfreundlichkeitskriterien gliedern sich in zwei Teile: ob die Syntax von Vorlagendateien und Skriptdateien prägnant und einfach zu verwenden ist.
Lassen Sie uns in die Tests eintauchen. Schauen wir uns zunächst die Syntax der beiden Vorlagendateien an: Die linke Seite des blauen Balkens ist die PHPLIB-Vorlage und die rechte Seite gehört zu SMARTY. Persönliche Vorlieben variieren, daher werde ich hier keinen Kommentar abgeben. Konzentrieren Sie sich auf den Vergleich der Verarbeitungsanweisungen im Skript und schauen Sie sich zunächst die PHPLIB-Vorlage an:
$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', 'rows');
for ($j = 0; $j < 10; $j++){
$tpl->set_var('tag' ,"$j");
$tpl->parse('rows', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');
Folgendes ist SMARTY:
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY verwendet nur zwei Variablen, Tags und Zeile, während die PHPLIB-Vorlage über einen zusätzlichen Vorlagendatei-Handler und einen unerklärlichen Ausgang verfügt. Um ehrlich zu sein, wusste ich nicht, warum es das gab, als ich es zum ersten Mal erfuhr. Es kommt mir jetzt immer noch seltsam vor. Warum hat SMARTY so wenige Verarbeitungsanweisungen? Die Antwort ist, dass die Arbeit vom Motor erledigt wird. Wenn Sie in das Quellprogramm eintauchen möchten, können Sie feststellen, dass es in Smarty_compiler.class.php eine Funktion namens _compile_tag() gibt, die für die Konvertierung des Abschnitts-Tags in eine PHP-Anweisung verantwortlich ist. Dies ist kein gewöhnliches Etikett, das den Arbeitsaufwand für die Skriptprogrammierung verringert. Es kann davon ausgegangen werden, dass SMARTY hinsichtlich der Benutzerfreundlichkeit höher ist.
Jetzt sind wir an der Reihe, uns auf die Geschwindigkeit zu konzentrieren. Schließlich ist es für einen erfahrenen Webentwickler nur eine Frage der Zeit, das schwierigste Tool zu beherrschen, ganz zu schweigen von der Template-Engine, einer Technologie mit einer sanften Lernkurve. Geschwindigkeit ist das Leben einer Webanwendung, insbesondere wenn die Template-Engine auf einer Website mit einer großen Anzahl gleichzeitiger Besuche verwendet wird, was noch wichtiger ist. Bevor der Test begann, dachte ich, dass die PHPLIB-Vorlage in dieser Hinsicht gewinnen würde, da sie viele Male aktualisiert wurde und im Grunde keine Fehler aufweist. Außerdem ist die Engine von SMARTY im Gegensatz zu ihrem Gegner, der nur zwei Dateien hat, zu groß.
Tatsächlich sind die Testergebnisse wie folgt: Die PHPLIB-Vorlage hat einen Geschwindigkeitsvorteil von 25 %:
Aber es wird nicht immer so sein. Ich habe erneut auf „Aktualisieren“ geklickt und dieses Mal habe ich ein anderes Ergebnis erhalten:
PHPLIB ist grundsätzlich unverändert, SMARTY hat die Geschwindigkeit jedoch um 25 % erhöht. Wenn Sie mit der Aktualisierung fortfahren, erhalten Sie ähnliche Ergebnisse wie beim zweiten Mal: SMARTY ist fast 10 % schneller als die PHPLIB-Vorlage. Ich denke, das ist der Grund, warum die kompilierte Version schneller ist als die interpretierte Version. Die SMARTY-Engine selbst ist sehr groß und die Vorlage muss in eine PHP-Datei kompiliert werden, sodass die Geschwindigkeit sicherlich nicht so hoch ist wie die der kompakten PHPLIB-Vorlage. Dies ist jedoch nur zum ersten Mal der Fall. Als SMARTY die Anfrage zum zweiten Mal erhielt, stellte es fest, dass die Vorlage bereits kompiliert worden war, sodass der zeitaufwändigste Schritt übersprungen wurde und der Gegner die Suche und Ersetzung Schritt für Schritt durchführen musste. Dies ist ein klassisches Beispiel für den „Austausch von Raum gegen Zeit“, der in den Kompilierungsprinzipien erwähnt wird.
5. Schlussfolgerung
Die Schlussfolgerung lautet: Wenn Sie sich in SMARTY verliebt haben, worauf warten Sie dann noch? Das bedeutet natürlich nicht, dass es allmächtig ist. Genauso wie wenn ich das MVC-Modell zum Schreiben meiner persönlichen Website verwende, reduziert es nicht nur nicht die Arbeitsbelastung, sondern ich muss mir auch immer Gedanken über die Kopplung zwischen verschiedenen Ebenen machen.
Wofür ist SMARTY nicht geeignet? Nehmen Sie ein klassisches Beispiel aus dem Handbuch: die Wettervorhersage-Website. Da fällt mir noch etwas ein: die Börse. Die Verwendung von SMARTY auf dieser Art von Website ist aufgrund der häufigen Neukompilierung ineffizient, daher ist die PHPLIB-Vorlage besser geeignet.
In diesem Artikel geht es nicht darum, die beiden Motoren zu vergleichen, sondern um die Vorteile von SMARTY zu veranschaulichen. Das Sinnvollste an der Verwendung ist, dass es Teil des neuen PHP-Systems ist. Als unabhängige Kraft gibt es neben den beiden Hauptsystemen .NET und JAVA ONE weitere Optionen für die Webentwicklung großer und mittlerer Größe. Für das GNU-Projekt ist seine Bedeutung nicht anders als der Sprung der Armee von Liu und Deng, die Tausende von Kilometern in die Dabie-Berge springt.
Autor: Yu Boxiang