Smarty Template Engine vs PHP

In randurile de mai jos am sa va explic de ce “third-party template engines” pentru PHP printre care se numara si Smarty (ca multe altele…) sunt o alegere proasta si o pierdere de timp. In loc sa aduca avantaje aplicatiilor in care sunt integrate, acestea de fapt le fac mai complexe, mai lente si mai dificil de administrat.
Scopul unui template engine este de a separa codul PHP de continutul HTML (design). Astfel codul PHP va fi in fisiere diferite de cele ce contin continutul HTML. Un prim avantaj este ca designul unui site (layout) se poate realiza independent de partea de programare (business code). Aceste avantaje au fost prezentate ca atuuri principale in folosirea unui template engine insa se uita ca insusi PHP este un template engine!
Iata un exemplu de folosire a unui fisier template in Smarty:
// Business Code (index.php)
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->assign('title', 'Template Engine Test');
$smarty->display('index.tpl');
// Presentation (index.tpl)
<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
</body>
</html>
Si codul echivalent PHP ce nu foloseste template engine si care evident va rula mult mai rapid:
// Business Code (index.php)
$title = 'Template Engine Test');
include('index.tpl');
// Presentation (index.tpl) <html> <head> <title><?php echo $title ?></title> </head> <body> <h1><?php echo $title ?></h1> </body> </html>
Iata cateva dezavantaje ale utilizarii unui template engine third-party gen Smarty:
- aplicatia devine mult mai complexa si mai dificil de administrat
- consuma resurse suplimentare ceea ce la site-uri de trafic poate fi o problema
- necesita actualizari permanente (numai si din motive de securitate)
Este caching-ul server side o solutie pentru cresterea performantei?
Pentru a reduce incarcarea serverului (economisirea de resurse scumpe CPU si RAM) sunt generate pagini statice corespunzatoare celor dinamice. In acest fel pentru pagini care se schimba rar serverul va servi pagina statica fara a mai executa scriptul si accesa baza de date ceea ce duce la performante imbunatatite. Teoretic. Insa practic tehnica este limitata si depinde foarte mult de continutul livrat de server: continut care se schimba rar – performante bune; continut care se schimba des – performante mediocre.
Apache web server benchmark
Graficul de mai jos prezinta cateva date de performanta pentru serverul web Apache 2.2 (requests per second):

Ciprian Pricop, 06/12/2007 Comments (9)


Dumi a scris pe 28/12/2007, 18:11
Tind sa te contrazic… ai auzit de cache ?!
Ciprian Pricop a scris pe 29/12/2007, 01:40
Dumi: da.
php s a scris pe 12/01/2008, 13:06
singurul template engine de php care ar trebui folosit ii cel oferit de PEAR care nu permite (asa cum ar si trebuie dealtfel) nici un fel de cod in interiorul template-ului ci numai markup language
(vorbesc desigur despre PEAR::Template_IT)
PS: exista si alte variante care sa respecte aceasta restrictie, personal prefer librariile foarte stabile si dovedite in timp.
vasile a scris pe 02/04/2008, 17:41
daca te uiti in IT.php ai sa te ingrozesti de la cate regex-uri sunt acolo. ( vorbesc desigur despre PEAR::Template_IT ) , si aceste preg_replace-uri sunt executate de fiecare data cand “incarci” o pagina . IT nu are bunul simt sa faca cache dupa ce a parsat template-ul , spre deosebire de smarty.
Pentru fanatici exista si Smarty lite …
Gica Z a scris pe 09/04/2008, 22:21
Dezavantajele enumerate in articol sunt intr-adevar reale, dar pentru site-urile de tip CMS nu prea exista o solutie mai buna. Ideal ar fi un “template engine” relativ simplu (care sa ofere doar facilitatile strict necesare, optimizat pentru viteza executiei) si care sa nu permita accesul din interiorul template-ului la variabilele PHP, respectiv la baza de date.
Ciprian Pricop a scris pe 09/04/2008, 22:36
Cea mai buna alternativa se afla sub ochii nostri si se numeste… WordPress.
Studiati modul cum sunt implementate template-urile in WordPress si veti regasi principiile enumerate mai sus in articol.
Nu intamplator WordPress-ul este considerat unul din cele mai bune CMS din punctul de vedere al optimizarii.
accesinterzis a scris pe 20/04/2010, 15:02
Era necesara aparitia unui limbaj de templating ca Smarty. Web-ul evolueaza. Am trecut usor de la site-uri statice la site-uri dinamice din ce in ce mai complexe. Asa cum exista un limbaj pentru markup, unul pentru scripting server-side s.a.m.d. asa trebuie sa existe si un limbaj de templating care sa iti permita sa faci doar templating cu el asa cu html-ul iti permite sa faci doar markup cu el si php-ul doar scripting server-side. Daca faci templating folosind PHP parerea mea e ca vei fi tot timpul tentat sa folosesti PHP nu doar pentru templating acolo unde trebuie sa faci doar templating si nimic altceva. Tot timpul vei fi tentat sa folosesti PHP in tpl-uri. Si exista tendinta de a amesteca business-ul cu presentation-ul. Bineinteles, parerile difera si fiecare considera smarty-ul bun sau rau in functie de el insusi, de stilul propriu de a programa si pe ce anume pune pret mai mult. Eu unul salut aceasta initiativa de a crea un nou limbaj exclusiv pentru templating. Imi place aceasta specializare a limbajelor.
accesinterzis a scris pe 20/04/2010, 15:12
Si inca o chestie. E bine sa cunosti Smarty deoarece cand te angajezi ai un atuu in plus la interviu daca stii Smarty. Fiindca firmele au site-uri facute pe platforme ce folosesc Smarty. Si vrei, nu vrei trebuie sa inveti si acest nou limbaj al Web-ului.
Off-topic: instaleaza si tu pluginul ala de “Follow up comments.”
Ciprian Pricop a scris pe 20/04/2010, 15:34
@accesinterzis: multumesc de sugestie.