al motor de plantillas
Smarty - PHP
de
: cjjer Se realizaron algunos cambios
para usar PHP para implementar la capa lógica y la capa de presentación del modelo de desarrollo MVC. Hay una variedad de motores de plantillas para elegir, pero después del nacimiento. del motor oficial SMARTY, la elección ha cambiado. Su concepto e implementación son bastante vanguardistas. Este artículo analiza principalmente las diferentes características de SMARTY en comparación con otros motores de plantillas, presenta brevemente la instalación y el uso del motor y utiliza un pequeño caso de prueba para comparar la velocidad y facilidad de uso de SMARTY y PHPLIBtemplate.
1. MVC requiere plantillas.
MVC se resumió por primera vez como un patrón de diseño durante el proceso de desarrollo del lenguaje SmallTalk. El propósito de MVC es permitir que diferentes roles de desarrollo realicen sus respectivas tareas en empresas grandes y medianas. proyectos. En el desarrollo de aplicaciones de red, se puede utilizar el siguiente diagrama para representar la relación entre conceptos.
Esta figura muestra una aplicación WEB simple. La información que el usuario ve en el navegador es el contenido en el servidor de la base de datos, pero ha sido procesada anteriormente por el servidor de aplicaciones. Los desarrolladores son responsables de establecer estructuras de datos, lógica para procesar datos y métodos para representar datos.
Cuando CGI se hizo popular en China en 1996, los primeros programadores WEB aprendieron de forma autodidacta desde HTML. No fue difícil imprimir líneas de HTML en PERL. Sin embargo, a medida que la velocidad de la red aumentaba, el tamaño de la página también aumentaba. Desde los 20 a 30 K originales, se ha multiplicado por diez. Escribir programas CGI crea un requisito urgente: separar el código fuente PERL y HTML. Así, el progreso social se refleja en la división del trabajo dentro del equipo de desarrollo. Dado que los artistas y programadores no están muy familiarizados con el trabajo de los demás, necesitan utilizar un lenguaje acordado para comunicarse durante la cooperación.
Este idioma no es nuestro idioma nativo ni el inglés. El término se llama plantilla, y la lógica y la presentación dependen de ello. Es un método de expresión que combina las características de HTML y lenguajes de scripting. De esta forma, la capa de presentación puede mostrar los datos procesados por la capa lógica en el formato deseado por el usuario. Si tiene experiencia en desarrollo de MFC en la plataforma Windows, definitivamente estará familiarizado con la encapsulación de Document/DocumentTemplate/View. Este es un ejemplo de MVC muy típico. Para las aplicaciones web, personalmente creo que EJB/servlets/JSP en J2EE son los más poderosos y, por supuesto, existen estructuras simples y hermosas. Otra implementación muy conocida es COM/DCOM+ASP. Esta combinación es la más utilizada en nuestro país.
Al comparar varias implementaciones de MVC en aplicaciones WEB, podemos tener una idea de las plantillas: un conjunto de scripts insertados en HTML, o script HTML, a través del cual el contenido insertado representa datos cambiantes. El siguiente es un ejemplo de un archivo de plantilla. Después del procesamiento, esta plantilla muestra ¡Hola mundo!
El método de procesamiento de$greetings
se omite por ahora y se analizará más adelante para compararlo.
2. ¿Por qué elegir SMARTY?
Para PHP, hay muchos motores de plantillas para elegir, como el primer PHPLIBtemplate y la estrella en ascenso Fasttemplate. Después de varias actualizaciones, se han vuelto bastante maduros y estables. Si está muy satisfecho con el motor de plantillas que tiene actualmente, entonces... siga leyendo. Creo que, como entusiasta del software libre o desarrollador que busca eficiencia y elegancia, la siguiente introducción a SMARTY será algo interesante.
Además de la influencia de las preferencias personales, siempre he tendido a utilizar implementaciones estándar oficiales, como el motor XML de APACHE, Axis. La ventaja es que puede obtener la mejor compatibilidad posible (por ejemplo, la compatibilidad de los primeros MFC con Win3x era mejor que la de otros marcos de aplicaciones y, por supuesto, ahora todas las versiones son muy completas). Antes de que se lanzara SMARTY, había estado usando la extensión de plantilla integrada en PEAR. Este motor es casi compatible con PHPLIBtemplate y Fasttemplate. Desde la sintaxis de la plantilla hasta el procesamiento de la plantilla, la plantilla se lee en la memoria y luego se llama a la función parse() para reemplazar las etiquetas preestablecidas con datos.
Veamos cómo lo hace SMARTY. Después de recibir la solicitud, primero determine si la URL se solicita por primera vez. Si es así, compile el archivo de plantilla requerido para la URL en un script PHP y luego redirija, si no, significa que la plantilla de la URL ya se ha solicitado; compilado. Comprobar Puede redirigir inmediatamente sin volver a compilar. Las condiciones de recompilación se pueden establecer en un límite de tiempo fijo.
¿Qué te parece? Ahora que lo pienso, ¿no es este el principio de JSP? De hecho, este tipo de compilación parece increíble cuando se usa en un motor de secuencias de comandos interpretadas como PHP, pero si lo piensas detenidamente, ¿la JVM también interpreta y ejecuta JAVA? Esto significa que nada es imposible, sólo inimaginable.
Ahora que hemos hablado de JAVA, permítanme expresar mis puntos de vista sobre el futuro de PHP. El sitio web oficial de PHP anunció que la versión PHP 5.0 se lanzará a finales de 2003. Esta versión tiene muchas características nuevas: como manejo de excepciones, espacios de nombres, más orientado a objetos, etc. Se puede decir que se está acercando a JAVA, y SMARTY también es una de las nuevas características, lo que hace que PHP sea más adecuado para el desarrollo de proyectos grandes y medianos. Pero parece estar cada vez más lejos de la razón por la que lo elegí en primer lugar: flexibilidad y facilidad de uso. Pero desde la perspectiva del ciclo de vida de un software, PHP está en la etapa de crecimiento, y las ventajas superan las desventajas para que los desarrolladores le den más funciones con la esperanza de que pueda ser competente para aplicaciones comerciales. Como usuario leal de PHP, ciertamente no querrás que siempre se acuse a PHP de capacidades insuficientes, ¿verdad?
¿POR QUÉ ELEGIR SMARTY SÓLO PORQUE ES COMO JSP? Ciertamente hay mejores razones. En primer lugar, además del costo relativamente alto de la primera compilación, siempre que no se modifique el archivo de plantilla, el script de caché compilado está disponible en cualquier momento, lo que ahorra mucho tiempo de análisis (); en segundo lugar, SMARTY tiene un; Biblioteca de funciones rica como PHP, desde contar palabras hasta sangría automática, ajuste de texto y expresiones regulares, puede usarla directamente si cree que no es suficiente, por ejemplo, necesita la función de visualización de paginación del conjunto de resultados de datos, SMARTY. También tiene fuertes capacidades de expansión, que se pueden ampliar mediante complementos.
Los hechos hablan más que las palabras. Diseñé un programa de prueba y comparé SMARTY y PHPLIBtemplate en función de los dos factores de velocidad y dificultad de desarrollo. La razón por la que elegí PHPLIBtemplate es que en el artículo de Patrick "Elegir la plantilla más adecuada en el mundo PHP", hay una comparación entre PHPLIB. template y Fasttemplate Competition, PHPLIBtemplate obtuvo una gran victoria, lo que le dio a SMARTY un buen oponente. Antes de realizar la prueba, hablemos de los problemas a los que se debe prestar atención durante el proceso de instalación.
3. Problemas que puede encontrar
En el sitio web oficial de SMARTY, hay un manual de usuario detallado y puede elegir versiones en línea en formatos HTML y PDF. No cubriremos aquí el contenido existente en el manual, sino que simplemente explicaremos los problemas que puede encontrar durante el primer uso.
La primera pregunta es muy fatal: ¿dice que no se puede encontrar el archivo requerido? No todo el mundo escribe aplicaciones según la estructura de directorios predeterminada de SMARTY. Esto debe especificarse manualmente, asumiendo que la estructura del directorio es la siguiente:
Debe especificar la estructura del directorio en index.php:
$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";
El primer problema se resuelve y luego viene el segundo: ¿Por qué no se puede utilizar la hermosa plantilla que acabo de generar con Dreamweaver? No es que haya algún problema con el archivo de plantilla, es porque el delimitador de etiquetas predeterminado de SMARTY es {} y, desafortunadamente, Javascript definitivamente contiene esta etiqueta. Afortunadamente, podemos usar cualquier carácter como delimitador, además de estas dos oraciones:
$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";
Ahora la instalación básicamente está completa, no hay problema.
4. Contraste y analogía
Primero, piense en el diseño de la prueba. El principal factor a juzgar es, por supuesto, la velocidad. Para las pruebas de velocidad se utilizó una media aritmética. Repita la generación de la página N veces en la página de prueba y luego compare el tiempo total de generación de la página. Otro factor importante es la facilidad de uso (en cuanto a la escalabilidad, no es necesario comparar los resultados), por lo que la plantilla utilizada no puede ser demasiado pequeña. Utilizo la página de mi página de inicio personal, un archivo HTML generado con Firework+Dreamweaver, de aproximadamente 7K de tamaño. La configuración de variables también adopta los bloques más utilizados, que se denominan bloques en la plantilla PHPLIB y secciones en SMARTY. No subestimes la diferencia de nombres. Los criterios de usabilidad se dividen en dos partes: si la sintaxis de los archivos de plantilla y los archivos de script es concisa y fácil de usar.
Profundicemos en las pruebas. Primero veamos la sintaxis de los dos archivos de plantilla: el lado izquierdo de la barra azul es la plantilla PHPLIB y el lado derecho pertenece a SMARTY. Las preferencias personales varían, por lo que no haré comentarios aquí. Concéntrese en comparar las declaraciones de procesamiento en el script, primero mire la plantilla 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');
Lo siguiente es SMARTY:
$smart->assign('row',$row);
$smart->display('bigfile.htm');
SMARTY solo usa dos variables, etiquetas y fila, mientras que la plantilla PHPLIB tiene un controlador de archivos de plantilla adicional y una salida inexplicable. Para ser honesto, no sabía por qué existía esto cuando lo supe por primera vez. Todavía me parece incómodo. ¿Por qué SMARTY tiene tan pocas declaraciones de procesamiento? La respuesta es que el trabajo lo realiza el motor. Si desea profundizar en el programa fuente, puede encontrar que hay una función llamada _compile_tag() en Smarty_compiler.class.php, que es responsable de convertir la etiqueta de la sección en una declaración PHP. Esta no es una etiqueta ordinaria. Tiene parámetros y datos, lo que ahorra la carga de trabajo de la programación de scripts. Se puede juzgar que la carga de trabajo de la etiqueta de plantilla es mayor en términos de facilidad de uso.
Ahora es nuestro turno de centrarnos en la velocidad. Después de todo, para un desarrollador web experto, es sólo cuestión de tiempo dominar la herramienta más difícil, sin mencionar el motor de plantillas, una tecnología con una curva de aprendizaje suave. La velocidad es la vida de una aplicación web, especialmente cuando el motor de plantillas se utiliza en un sitio con una gran cantidad de visitas simultáneas, lo cual es aún más importante. Antes de que comenzara la prueba, pensé que la plantilla PHPLIB ganaría en este aspecto porque se ha actualizado muchas veces y básicamente no tiene errores. Además, el motor de SMARTY es demasiado grande, a diferencia de su oponente que solo tiene dos archivos.
Efectivamente, los resultados de la prueba se muestran a continuación. La plantilla PHPLIB tiene una ventaja de velocidad del 25%:
Pero no siempre será así. Presioné actualizar nuevamente y esta vez obtuve un resultado diferente:
PHPLIB básicamente no ha cambiado, pero SMARTY ha aumentado la velocidad en un 25%. Continúe actualizando y obtendrá resultados similares a la segunda vez: SMARTY es casi un 10% más rápido que la plantilla PHPLIB. Creo que es por eso que la versión compilada es más rápida que la versión interpretada. El motor SMARTY en sí es muy grande y la plantilla debe compilarse en un archivo php, por lo que la velocidad ciertamente no es tan rápida como la plantilla PHPLIB compacta. Pero esto es sólo así por primera vez. Al recibir la solicitud por segunda vez, SMARTY descubrió que la plantilla ya había sido compilada, por lo que se omitió el paso que consumía más tiempo y el oponente tuvo que realizar la búsqueda y el reemplazo paso a paso. Este es un ejemplo clásico de "intercambiar espacio por tiempo" mencionado en los principios de compilación.
5. Conclusión
La conclusión es que si te has enamorado de SMARTY, ¿a qué estás esperando? Por supuesto, esto no significa que sea omnipotente. Al igual que cuando uso el modelo MVC para escribir mi sitio web personal, no solo no reduce la carga de trabajo, sino que siempre tengo que preocuparme por el acoplamiento entre diferentes niveles.
¿Para qué no es adecuado SMARTY? Tomemos un ejemplo clásico del manual: el sitio web de pronóstico del tiempo. Me viene a la mente una cosa más: el mercado de valores. Usar SMARTY en este tipo de sitio web será ineficiente debido a la recompilación frecuente, por lo que la plantilla PHPLIB es más adecuada.
Este artículo no pretende comparar los dos motores, sino ilustrar las ventajas de SMARTY. Lo más significativo de su uso es que es parte del nuevo sistema PHP. Como fuerza independiente, además de los dos sistemas principales de .NET y JAVA ONE, existen otras opciones para el desarrollo web a gran y mediano tamaño. Para el proyecto GNU, su significado no es diferente al del ejército de Liu y Deng saltando miles de kilómetros hacia las montañas Dabie.
Autor: Yu Boxiang