de modèles
Smarty - PHP
de
: cjjer J'ai apporté quelques modifications
pour utiliser PHP pour implémenter la couche logique et la couche de présentation du modèle de développement MVC. Il existe une variété de moteurs de modèles parmi lesquels choisir, mais après la naissance. du moteur officiel SMARTY, le choix a changé. Son concept et sa mise en œuvre sont assez avant-gardistes. Cet article traite principalement des différentes caractéristiques de SMARTY par rapport à d'autres moteurs de modèles, présente brièvement l'installation et l'utilisation du moteur, et utilise un petit cas de test pour comparer la vitesse et la facilité d'utilisation de SMARTY et PHPLIBtemplate.
1. MVC nécessite des modèles.
MVC a d'abord été résumé comme un modèle de conception au cours du processus de développement du langage SmallTalk, représentant respectivement le modèle, la vue et le contrôle. Le but est de permettre à différents rôles de développement d'accomplir leurs tâches respectives dans les grandes et moyennes tailles. projets. Dans le développement d'applications réseau, le diagramme suivant peut être utilisé pour représenter la relation entre les concepts.
Cette figure montre une application WEB simple. Les informations que l'utilisateur voit sur le navigateur sont le contenu du serveur de base de données, mais elles ont déjà été traitées par le serveur d'applications. Les développeurs sont responsables de l'établissement des structures de données, de la logique de traitement des données et des méthodes de représentation des données.
Lorsque CGI est devenu populaire en Chine en 1996, les premiers programmeurs WEB étaient tous autodidactes à partir du HTML. Il n'était pas difficile d'imprimer des lignes HTML en PERL. Cependant, à mesure que la vitesse du réseau augmentait progressivement, la taille des pages augmentait également. de 20 à 30 K d'origine, elle a été multipliée par dix. L'écriture de programmes CGI crée un besoin urgent : séparer le code source PERL et HTML. Ainsi, le progrès social se reflète dans la division du travail au sein de l’équipe de développement. Étant donné que les artistes et les programmeurs ne connaissent pas très bien le travail de chacun, ils doivent utiliser un langage convenu pour communiquer au cours de leur coopération.
Cette langue n'est pas notre langue maternelle ni l'anglais. Le terme est appelé modèle, et la logique et la présentation en dépendent. Il s'agit d'une méthode d'expression qui combine les caractéristiques du HTML et des langages de script. De cette manière, la couche présentation peut afficher les données traitées par la couche logique dans le format souhaité par l'utilisateur. Si vous avez une expérience en développement MFC sous la plateforme Windows, vous serez certainement familier avec l'encapsulation de Document/DocumentTemplate/View. Il s'agit d'un exemple MVC très typique. Pour les applications Web, je pense personnellement que les EJB/servlets/JSP dans J2EE sont les plus puissants, et bien sûr il existe des Structs simples et beaux. Une autre implémentation bien connue est COM/DCOM+ASP. Cette combinaison est la plus utilisée dans notre pays.
En comparant plusieurs implémentations de MVC dans des applications WEB, nous pouvons avoir une idée des modèles : un ensemble de scripts insérés dans HTML, ou script HTML, à travers lesquels le contenu inséré représente des données changeantes. Voici un exemple de fichier modèle. Après traitement, ce modèle affiche Hello, world!
La méthode de traitement de$greetings
est omise pour l'instant et sera discutée plus tard à des fins de comparaison.
2. Pourquoi choisir SMARTY ?
Pour PHP, il existe de nombreux moteurs de modèles parmi lesquels choisir, tels que le premier modèle PHPLIB et l'étoile montante Fasttemplate. Après plusieurs mises à niveau, ils sont devenus assez matures et stables. Si vous êtes très satisfait du moteur de modèles dont vous disposez actuellement, alors... continuez à lire. Je pense qu'en tant que passionné de logiciels libres ou développeur recherchant l'efficacité et l'élégance, l'introduction SMARTY suivante sera quelque peu intéressante.
En plus de l'influence de mes préférences personnelles, j'ai toujours eu tendance à utiliser des implémentations standards officielles, telles que le moteur XML d'APACHE Axis. L'avantage est que vous pouvez obtenir la meilleure compatibilité possible (par exemple, la compatibilité des premiers MFC avec Win3x était meilleure que celle des autres frameworks d'application, et bien sûr maintenant toutes les versions sont très complètes). Avant la sortie de SMARTY, j'utilisais l'extension de modèle intégrée dans PEAR. Ce moteur est quasiment compatible avec PHPLIBtemplate et Fasttemplate De la syntaxe du modèle au traitement du modèle, le modèle est lu en mémoire puis la fonction parse() est appelée pour remplacer les balises prédéfinies par des données.
Voyons comment SMARTY procède. Après avoir reçu la demande, déterminez d'abord si l'url est demandée pour la première fois. Si tel est le cas, compilez le fichier modèle requis pour l'url dans un script php, puis redirigez-le si ce n'est pas le cas, cela signifie que le modèle de l'url a été créé. compilé. Vérifiez Vous pouvez rediriger immédiatement sans recompiler. Les conditions de recompilation peuvent être définies sur une limite de temps fixe. La valeur par défaut est que le fichier modèle est modifié.
Et ça vous semble familier ? À bien y penser──N'est-ce pas le principe de JSP ! En effet, ce genre de compilation semble incroyable lorsqu'elle est utilisée sur un moteur de script interprété comme PHP, mais si on y réfléchit bien, JAVA n'est-il pas également interprété et exécuté par la JVM ? Cela signifie que rien n’est impossible, seulement inimaginable.
Maintenant que nous avons parlé de JAVA, permettez-moi d'exprimer mon point de vue sur l'avenir de PHP. Le site officiel de PHP a annoncé que la version PHP 5.0 sortirait fin 2003. Cette version comporte de nombreuses nouvelles fonctionnalités : comme la gestion des exceptions, les espaces de noms, plus orienté objet, etc. On peut dire qu'il se rapproche de JAVA, et SMARTY est également l'une des nouvelles fonctionnalités, rendant PHP plus adapté au développement de projets de grande et moyenne taille. Mais il semble s’éloigner de plus en plus de la raison pour laquelle je l’ai choisi en premier lieu : la flexibilité et la facilité d’utilisation. Mais du point de vue du cycle de vie d'un logiciel, PHP est en phase de croissance, et les avantages l'emportent sur les inconvénients pour les développeurs qui souhaitent lui donner plus de fonctions dans l'espoir qu'il puisse être compétent pour des applications commerciales. En tant qu’utilisateur fidèle de PHP, vous ne voulez certainement pas que PHP soit toujours accusé de capacités insuffisantes, n’est-ce pas ?
POURQUOI CHOISIR SMARTY, JUSTE PARCE QUE C'EST COMME JSP ? Il existe certainement de meilleures raisons. Tout d'abord, en plus du coût relativement élevé de la première compilation, tant que le fichier modèle n'est pas modifié, le script de cache compilé est disponible à tout moment, ce qui permet d'économiser beaucoup de temps d'analyse(). Deuxièmement, SMARTY a un ; bibliothèque de fonctions riche comme PHP. Du comptage de mots à l'indentation automatique, au retour à la ligne du texte et aux expressions régulières, vous pouvez l'utiliser directement si vous pensez que cela ne suffit pas, par exemple, vous avez besoin de la fonction d'affichage par pagination de l'ensemble de résultats de données, SMARTY ; possède également de fortes capacités d'extension, qui peuvent être étendues via des plug-ins.
Les faits sont plus éloquents que les mots. J'ai conçu un programme de test et comparé SMARTY et PHPLIBtemplate en fonction des deux facteurs de vitesse et de difficulté de développement. La raison pour laquelle j'ai choisi PHPLIBtemplate est que dans l'article de Patrick "Choisir le modèle le plus approprié dans le monde PHP", il y a une comparaison entre PHPLIB. template et Fasttemplate Competition, PHPLIBtemplate a remporté une belle victoire, ce qui a donné à SMARTY un bon adversaire. Avant de tester, parlons des problèmes auxquels il faut prêter attention pendant le processus d’installation.
3. Problèmes que vous pouvez rencontrer
Sur le site officiel de SMARTY, vous trouverez un manuel d'utilisation détaillé et vous pouvez choisir des versions en ligne aux formats HTML et PDF. Nous ne couvrirons pas ici le contenu existant dans le manuel, mais expliquerons simplement les problèmes que vous pourriez rencontrer lors de la première utilisation.
La première question est très fatale : elle dit que le fichier recherché est introuvable ? Tout le monde n'écrit pas d'applications selon la structure de répertoires par défaut de SMARTY. Cela doit être spécifié manuellement. En supposant que la structure des répertoires soit la suivante :
Vous devez spécifier la structure des répertoires dans index.php :
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
Le premier problème est résolu, et vient ensuite le deuxième : Pourquoi le magnifique modèle que je viens de générer avec Dreamweaver ne peut-il pas être utilisé ? Ce n'est pas qu'il y ait quelque chose qui ne va pas avec le fichier modèle, c'est parce que le délimiteur de balise par défaut de SMARTY est {}, et malheureusement Javascript contient définitivement cette balise. Heureusement, nous pouvons utiliser n'importe quel caractère comme délimiteur, plus ces deux phrases :
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
Maintenant, l'installation est pratiquement terminée, pas de problème.
4. Contraste et analogie
Tout d'abord, réfléchissez à la conception du test. Le principal facteur de jugement est bien sûr la vitesse. Pour les tests de vitesse, une moyenne arithmétique a été utilisée. Répétez la génération de page N fois sur la page de test, puis comparez le temps total de génération de page. Un autre facteur important est la facilité d’utilisation (en ce qui concerne l’évolutivité, il n’est pas nécessaire de comparer les résultats), le modèle utilisé ne peut donc pas être trop petit. J'utilise la page de ma page d'accueil personnelle, un fichier HTML généré avec Firework+Dreamweaver, d'une taille d'environ 7 Ko. Les paramètres des variables adoptent également les blocs les plus couramment utilisés, appelés blocs dans le modèle PHPLIB et sections dans SMARTY. Ne sous-estimez pas la différence de noms. Les critères d'utilisabilité sont divisés en deux parties : si la syntaxe des fichiers modèles et des fichiers script est concise et facile à utiliser.
Passons aux tests. Regardons d'abord la syntaxe des deux fichiers modèles : le côté gauche de la barre bleue est le modèle PHPLIB, et le côté droit appartient à SMARTY. Les préférences personnelles varient, je ne ferai donc pas de commentaire ici. Concentrez-vous sur la comparaison des instructions de traitement dans le script, regardez d'abord le modèle PHPLIB :
$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');
Ce qui suit est SMARTY :
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY n'utilise que deux variables, balises et ligne, tandis que le modèle PHPLIB a un gestionnaire de fichier modèle supplémentaire et une sortie inexplicable. Pour être honnête, je ne savais pas pourquoi cette sortie existait lorsque je l'ai appris pour la première fois. Cela semble encore gênant maintenant. Pourquoi SMARTY a-t-il si peu d'instructions de traitement ? La réponse est que le travail est effectué par le moteur. Si vous aimez vous plonger dans le programme source, vous constaterez qu'il existe une fonction appelée _compile_tag() dans Smarty_compiler.class.php, qui est responsable de la conversion de la balise de section en une instruction PHP. Ce n'est pas une étiquette ordinaire. Elle contient des paramètres et des données, ce qui permet d'économiser la charge de travail sur l'étiquette du modèle. On peut juger que SMARTY est plus facile à utiliser.
C'est maintenant à notre tour de nous concentrer sur la vitesse. Après tout, pour un développeur Web expérimenté, ce n'est qu'une question de temps pour maîtriser l'outil le plus difficile, sans parler du moteur de modèles, une technologie avec une courbe d'apprentissage douce. La vitesse est la vie d'une application Web, surtout lorsque le moteur de modèles est utilisé sur un site avec un grand nombre de visites simultanées, ce qui est encore plus important. Avant le début du test, je pensais que le modèle PHPLIB gagnerait sur cet aspect car il a été mis à jour plusieurs fois et ne présente pratiquement aucun bug. De plus, le moteur de SMARTY est trop gros, contrairement à son adversaire qui n'a que deux fichiers.
Effectivement, les résultats des tests sont les suivants, le modèle PHPLIB a un avantage de vitesse de 25 % :
Mais ce ne sera pas toujours comme ça. J’ai de nouveau appuyé sur Actualiser, et cette fois j’ai obtenu un résultat différent :
PHPLIB est fondamentalement inchangé, mais SMARTY a augmenté la vitesse de 25 %. Continuez à actualiser et vous obtiendrez des résultats similaires à la deuxième fois : SMARTY est près de 10 % plus rapide que le modèle PHPLIB. Je pense que c'est pourquoi la version compilée est plus rapide que la version interprétée. Le moteur SMARTY lui-même est très volumineux et le modèle doit être compilé dans un fichier php, donc la vitesse n'est certainement pas aussi rapide que le modèle PHPLIB compact. Mais ce n'est que le cas pour la première fois. Lors de la deuxième réception de la demande, SMARTY a constaté que le modèle avait déjà été compilé, de sorte que l'étape la plus longue a été ignorée et l'adversaire a dû effectuer une recherche et un remplacement étape par étape. Il s'agit d'un exemple classique de « l'échange d'espace contre du temps » mentionné dans les principes de compilation.
5. Conclusion
La conclusion est que si vous êtes tombé amoureux de SMARTY, alors qu'attendez-vous ? Bien sûr, cela ne veut pas dire qu'il est tout-puissant. Tout comme lorsque j'utilise le modèle MVC pour écrire mon site Web personnel, non seulement cela ne réduit pas la charge de travail, mais je dois toujours me soucier du couplage entre les différents niveaux.
À quoi SMARTY ne convient-il pas ? Prenons un exemple classique du manuel : le site Web de prévisions météo. Une autre chose me vient à l’esprit : la bourse. Utiliser SMARTY sur ce type de site Web sera inefficace en raison des recompilations fréquentes, le modèle PHPLIB est donc plus adapté.
Cet article n’a pas pour but de comparer les deux moteurs, mais d’illustrer les avantages de SMARTY. La chose la plus significative dans son utilisation est qu'il fait partie du nouveau système PHP. En tant que force indépendante, en plus des deux systèmes majeurs .NET et JAVA ONE, il existe d'autres options pour le développement Web de grande et moyenne taille. Pour le projet GNU, sa signification n'est pas différente de celle de l'armée de Liu et Deng sautant des milliers de kilomètres dans les monts Dabie.
Auteur : Yu Boxiang