Blog de Israel Viana

5 razones para no usar Smarty (o similares)

21 de noviembre de 2009

En la mayoría de los casos, Smarty no es la solución idónea para separar la lógica de las vistas, aunque hay que admitir que la versión 3 está siendo un salto de calidad impresionante. No obstante, estas son las cinco principales razones que he encontrado para no incluirlo más en mis proyectos:

  1. PHP es un lenguaje con sintaxis embebida, es decir, es de por sí un sistema de plantillas. Para mayor claridad puedes utilizar la tag de apertura corta (<? en lugar de <?php) y el operador de impresión (<?=$nombre ?> en lugar de <?php echo $nombre ?>). Además, Smarty no añade funcionalidad.
  2. Con Smarty debes aprender una nueva sintaxis para imprimir variables, hacer bucles, etc.
  3. En aplicaciones complejas tendrás que crear un montón de plug-ins para cargar widgets u otros fragmentos de código para las vistas que quieras reutilizar. O bien utilizar cada dos por tres la tag {php}.
  4. Smarty es difícil de integrar en gestores de contenido, frameworks y editores de código.
  5. Smarty reduce el rendimiento de tus aplicaciones web ya que debe parsear y convertir a PHP las plantillas. Incluso con caché el rendimiento se ve afectado (más accesos a disco).

Ya habíamos hablado de este tema en Plantillas PHP: cuestión de rendimiento, proponiendo el funcionamiento básico de un motor de plantillas basado en PHP puro.

ACTUALIZACIÓN (23 de noviembre):

Algunos expertos han escrito artículos en profundidad sobre este tema, por ejemplo "Template Engines" de Brian Lozer o la entrada de "PHP and Templates" de phpPatterns.

Con respecto a las alternativas, Savant y PHPTemplate (creado para Drupal) son buenas opciones. Además, los principales frameworks (CakePHP, etc) y gestores de contenido (Joomla!, Wordpress) suelen incluir sus propios motores de plantillas en PHP.

“In short, the point of template engines should be to separate your business logic from your presentation logic, not separate your PHP code from your HTML code.”

Compartir en Twine Delicious Facebook Twitter

8 comentarios

Gravatar de Enrique...
Enrique Place
el 23 de noviembre de 2009 a las 13:44

En sí estoy casi de acuerdo con todos los puntos, menos el primero ;-)

Te hago referencia al post, así no lo explico nuevamente ;-)

http://phpsenior.blogspot.com/2009/02/por-que-no-deberiamos-usar-los-short.html

Saludos! ;-)

Gravatar de Isra
Isra
el 23 de noviembre de 2009 a las 14:43

Gracias por tu comentario y tu visita, Enrique ;-)

Estoy de acuerdo, las etiquetas cortas se deben utilizar sólo si el beneficio es mayor a los riesgos (como todo en esta vida). Personalmente nunca las uso pero hay que reconocer que pueden mejorar la legibilidad de las plantillas.

De todos modos, lo de las short tags es discutible, pero que PHP sea un lenguaje embebido es así y no hay discusión posible... en todo caso remitirse a Rasmus Lerdorf :-P

Gravatar de Caledor
Caledor
el 24 de noviembre de 2009 a las 00:57

Plenamente en desacuerdo con el punto 5, tenemos (casi) Smarty 3 con una mejora de la velocidad que supera a cualquiera de las versiones anteriores mereciría la pena realizar una comparativa de Smarty con el resto de opciones.

Gravatar de Isra
Isra
el 24 de noviembre de 2009 a las 17:33

No digo que Smarty sea una mala idea, digo que PHP puro es mejor ;-P

Y el rendimiento no es un punto crítico, ya que la caché está ahí. No obstante, me juego lo que quieras a que por muy buen rendimiento que tenga Smarty parsear y compilar una plantilla es más rápido que compilarla sólamente. O, si se aplica la caché, recuperar de disco dos scripts (la plantilla y el que lo carga, sin contar las librerías de Smarty) es más lento que recuperar uno sólo (la plantilla en PHP puro).

Gravatar de _Karl_
_Karl_
el 30 de diciembre de 2009 a las 21:31

Hola muy bueno el articulo y la pequeña discucion de si usar o no un sistema de plantillas.

Yo solía programar mis aplicaciones siempre embebiendo el php con html, un tiempo me toco trabajar mucho con los famosos foros phpBB, lo primerito que llamo mi atención fue ver como tenían separado el código php de html, ellos utilizan su propia class de plantillas, pero la verdad fue algo que cambio la forma de programar mis aplicaciones.

Como dices Isra no es malo utilizar Smarty o cualquier otro sistema de plantillas, yo pienso que aquí seria a criterio de cada quien.

Por ejemplo Smarty es muy robusto y teda una infinidad de posibilidades, pero igual solo lo recomendaría si es para proyectos muy grandes, yo intente utilizarlo pero la verdad fue una pérdida de tiempo en tener que aprender su sintaxis y otras cosas y realmente iba más allá de lo que yo necesitaba, más claridad en el código de mis aplicaciones...

Pero en mi afán de aun querer separar mí código php de html me llevo a seguir buscando una clase para este fin, después de probar varias, me encontré con una que hasta ahora me ha resultado bastante bien y que me gustaría compartir con todos ustedes para que meden su opinión al respecto y por si a alguien más le interesa:

Se llama Template Power la url es: http://templatepower.codocad.com/

Para lo que realmente necesito está bastante bien, separo el código php del html.

Una de las tantas ventajas de utilizar un sistema de plantillas es que cuando se trabaja en equipo unos se dedican al código php otros al html y css, y de esta forma es más sencillo porque ya solo nosotros vamos llenando los html’s y viceversa los de diseño ya solo ven etiquetas html y no preguntan en donde pueden poner un <div> o que ya se volaron un pedazo de código ejejeje...

Esta es mi experiencia que he tenido con un sistema de plantillas.-

Saludos.-

Gravatar de Isra
Isra
el 31 de diciembre de 2009 a las 00:17

¡Gracias por compartir tu experiencia, Karl! Estamos todos de acuerdo en que separar código de plantillas es beneficioso y casi necesario.

Por su parte, TemplatePower no me convence demasiado. Si has conseguido acceder a tus clases y objetos dentro de ellas bien, pero si no le veo un gran handicap a este sistema.

Gravatar de Manuel
Manuel
el 7 de enero de 2010 a las 22:32

¿Has probado Twig (http://www.twig-project.com)? Es un proyecto del creador de symfony.

Sin duda yo también soy partidario de usar PHP (al estilo Zend_View) antes que sistemas de plantillas siempre que se pueda. Pero eso no quita que estos sistemas tengan su sitio.
Por ejemplo, en un proyecto donde trabajan un programador PHP y un maquetador XHTML+CSS donde hay frecuentes cambios y actualizaciones. Para el maquetador es mucho más sencillo trabajar con plantillas como las de Twig o Smarty que con plantillas con PHP puro.
O en el caso de una aplicación que te permite modificar el aspecto de tu web sin darte la posibilidad (por motivos de seguridad) de usar el código PHP (es lo que yo hago con tiendy.com).

Yo creo que la cuestión no es qué es mejor, así a secas, sino "qué es mejor para mi proyecto concreto" :)

Felicidades por el blog.

Gravatar de Isra
Isra
el 8 de enero de 2010 a las 12:17

Gracias por la información, Manuel. No conocía Twig y el nombre de Fabien Potencier me genera bastante confianza. Tiene muy buena pinta, tanta que creo que le hace competencia directa a Smarty. No obstante sigo sin estar convencido de su idoneidad frente a sistemas de plantillas basados en PHP.

Lo que sí es cierto es que cada proyecto es diferente, pero a mí de estos sistemas me preocupa la orientación a objetos y poder llamar a clases estáticas, por ejemplo. En un entorno totalmente orientado a objetos y desacoplado los sistemas de plantillas con sublenguajes no se integran tan bien como los basados en PHP, y ese es, personalmente, mi argumento más fuerte para no usar ni Smarty ni Twig.


Escribe tu opinión

Nombre:
E-mail: (no se mostrará)
Sitio web:
Por favor, suma 8 + 7:
Comentario:
israelviana.es es propiedad de Israel Viana, escrito en Murcia (España). Puedes ponerte en contacto conmigo a través de la dirección de e-mail .com.
Información en RDF Metadatos Dublin Core Creative Commons License