performance - descargar - Por qué jugar! marco elegido Groovy para el motor de plantilla
descargar plantillas laravel 5 (5)
JSP no es factible ya que cada JSP se compila en un servlet y la API de servlet proporciona cosas como la sesión del lado del servidor que no son compatibles con el paradigma REST. No queremos volver a las edades oscuras de las sesiones del servidor mal escalables, los problemas de abotonamiento en el navegador, los repositorios, etc.
Las plantillas de Japid son interesantes, pero no están respaldadas por una gran comunidad y tal vez ni siquiera existían en el momento en que se creó el juego (aunque no estoy seguro). Intenté con Japid como reemplazo de las plantillas de Groovy en mi propia aplicación y descubrí en una prueba de JMeter que el beneficio sería solo marginal, del 10% al máximo. 25% de mejora.
Supongo que al final todo depende de los requisitos de escalabilidad y la estructura de sus páginas. Escogí el caso de uso del 90% de mi aplicación e hice la prueba. Para mí, la pequeña mejora no justifica los costos adicionales de la dependencia adicional (me gusta mantener las dependencias al mínimo para la mantenibilidad).
Las plantillas Groovy no son malas ni lentas en general. Utilice variables tipadas siempre que sea posible (en lugar de "def"), ¡incluso en cierres! Mantenga los valores de las propiedades accedidas en variables locales. Haga una búsqueda de resultados razonable. Luego mantenga los dedos cruzados para que GSP pueda funcionar con Groovy ++ en el futuro y listo;)
Para mí, la pregunta no sería por qué usaron groovy en las vistas. Es decir, porque prefiero extrañarlo tanto en la capa de controlador. Groovy haría la codificación del comportamiento del controlador mucho más fácil en mi humilde opinión.
Desde su sitio web http://www.playframework.org/documentation/1.0/faq
"El mayor consumidor de CPU en la pila Play en este momento es el motor de plantillas basado en Groovy. Sin embargo, como las aplicaciones Play son fácilmente escalables, no es realmente un problema si necesita atender un tráfico muy alto: puede equilibrar la carga entre varios servidores. Y esperamos un aumento del rendimiento en este nivel con el nuevo JDK7 y su mejor soporte de lenguajes dinámicos ".
Entonces, ¿no hay mejores opciones? ¿Qué hay de JSP?
Sí, está Japid. Que es mucho, mucho más rápido.
Estoy totalmente de acuerdo con la elección de la facilidad con respecto a la velocidad que los diseñadores de Play Framework han creado aquí. Supongo que si la creación de plantillas comienza a estorbar en términos de rendimiento, puede (¡y debe!) Medir los bits lentos y, de ser posible, refactorizarlos en etiquetas rápidas. Con eso, es probable que guarde el 80% de la CPU moviendo el 20% en etiquetas rápidas, dejándole con flexibilidad y velocidad adecuada.
Habiendo dicho eso, estoy esperando un experimento. Estoy planeando ver qué tan bien las nuevas plantillas de Scala ("prestado" de Razor.NET - sintaxis limpia impresionante) funcionan con los controladores / modelos de Java. El back-end de Scala todavía no está ahí en términos de facilidad comparativa, pero el lenguaje de plantillas ciertamente se complica.
En primer lugar, JSP no era una opción válida para Play, ya que optó por no ir por la ruta Java EE (de la cual JSP forma parte). En cambio, Play eligió usar Groovy como un motor de plantillas intuitivo, simple pero poderoso.
Sin embargo, una de las mejores características de Play es que es un sistema conectable, lo que significa que muchas partes del sistema central pueden simplemente reemplazarse. Esto incluye el motor de plantillas, y hay un par que ya están disponibles.
El más popular es Japid. Se dice que es 2-20 veces más rápido que el motor de plantillas estándar, y ha existido por un tiempo. Para obtener más información, consulte aquí http://www.playframework.org/modules/japid .
Una segunda opción es Cambridge, aunque esto solo ha estado disponible por un tiempo, pero es razonablemente activo en los tableros de mensajes (ver https://groups.google.com/forum/?hl=en#!searchin/play-framework / cambridge / play-framework / IxSei-9BGq8 / X-3pF5tWAKAJ ).
Tiendo a apegarme a Groovy, como me gusta la forma en que funciona, y no me parece demasiado malo en términos de rendimiento, pero cada aplicación es individual, por lo que sus propias pruebas de rendimiento deberían guiarlo por su propio camino.
Puede llegar tarde a la fiesta en 2016. Play 2 está fuera, y el JDK (sin mencionar el hardware) mejoró drásticamente. No estoy usando Play o Spring Boot, ya que mi plataforma no los necesita, solo generación de HTML / texto en tiempo de ejecución puro a partir de plantillas.
En primer lugar, cuando hablamos de plantillas de Groovy, hay más de una. Uso el Groovy SimpleTemplateEngine original para cualquier cosa, desde correos electrónicos hasta páginas web ricas, si la mayoría de las personas hoy en día prefieren el MarkupTemplateEngine "avanzado" con su sintaxis de constructor que no es HTML. No hice esa ruta debido al soporte IDE (por ejemplo, UntelliJ) para los archivos HTML JSPish con JavaScript, capturando etiquetas no cerradas, llaves, etc. Además, ¿cómo incluirías JavaScript en la plantilla de estilo "generador" basada en llaves?
Cualquiera que elija, SimpleTemplateEngine y MarkupTemplateEngine compilan estadísticamente sus plantillas, aunque el documento de Groovy solo lo menciona para este último. ¿Por qué no generaría una clase para el primero? No los comparé uno contra el otro, pero esperaba que SimpleTemplateEngine fuera más rápido, ya que es ... bueno, más simple, no convierte ninguna sintaxis en concatenaciones de cadenas con ifs y loops intermedios.
Y de hecho es muy rápido. Estaba preocupado por invocarlo en un bucle. No hace ninguna diferencia. No hay sobrecarga, ya que la plantilla se compila una vez.
Utilizo varias plantillas pequeñas responsables de generar el marcado de control de formulario individual (HTML + JS) para generar un formulario compuesto, incluido en un contenedor de nivel superior, incluido en otro contenedor, y así sucesivamente, hasta que se forma la página completa. La descomposición de su vista de esa manera lo hace, como ya ha adivinado, modular, encapsulado y "orientado a objetos", compuesto de muchos componentes MVC individuales que se complementan entre sí. Algo así como las buenas y antiguas etiquetas JSP personalizadas, solo evaluadas en tiempo de ejecución y compatibles con tecnologías como Spring Boot, si no puedes resistirte a cosas tan modernas como la promoción de currículums.
Una forma de prueba con 100 campos (todos los controles "inteligentes" complejos con gestión de estado encapsulado y comportamiento) se procesa en 150ms la primera vez, y luego 10-14ms después. En un depurador IDE en mi 4y.o. cuaderno. También verifiqué que es seguro para subprocesos, ya que Groovy nunca lo mencionó explícitamente. ¿Por qué no sería así, si se compila en una clase Groovy sin estado como cualquier otra? Llame a createTemplate () una vez, almacene la plantilla en algún lugar, y úsela (llame a Template.make ()) en su servlet u otro contexto concurrente. Obviamente, nunca tendré un formulario de 100 campos en una aplicación real. Cualquiera que lo haga, necesita reconsiderar su UX.
El rendimiento es bastante adecuado. Incluso aceptaría un segundo para renderizar una página de 100 campos. Piense en ello, no necesita el máximo rendimiento de nanotrading o rastreo de misiles nucleares en una aplicación web. Si lo hace, elija Jamon: http://www.jamon.org/Overview.html , que genera una clase Java, normalmente escribiría para concatenar cadenas. No lo probé, ya que no me gustan los pasos de compilación adicionales (ejecutados automáticamente por Maven, pero aún así). El código de bytes compilado de Groovy es lo suficientemente bueno para mí, en comparación con el Java compilado, sí, fuertemente tipado. La diferencia sería marginal a menos que esté haciendo algo complejo, que no debería dentro de una plantilla (ver a continuación). Jugar con variables Groovy tipadas contra def como se sugiere en este hilo, solo me salvó un par de milisegundos en esa ejecución de 100 plantillas.
Las plantillas no deben tener mucha lógica de procedimiento (variables internas, ifs y bucles) de todos modos, esa es la responsabilidad del controlador, no de la vista. Dicho esto, los ifs y los bucles son imprescindibles para un motor de plantillas. ¿Por qué uno usaría Manillar / Bigote, si él / ella simplemente puede llamar a String.replace ()?
El resto de los motores de plantilla también es irrelevante. Sin concatenación de cadenas (por ejemplo, Velocity, o Freemarker) o la tecnología basada en JS interpretada (por ejemplo, Jade) alguna vez vencería el enfoque más directo de Jamon en cuanto al rendimiento. Y al ser un programador de Java, desea utilizar su idioma / sintaxis favorita: ya sea directamente (Jamon) o en un 90% cerca de Java, Groovy es (al ser una Java conciso y centrada en scripting). No comentaría sobre Scala: el asunto de las preferencias. Aparte de su supuesta sintaxis "conciso" (menos y menos relevante con Java 8+) tiene un precio. Y solo importa para bucles complejos. No desea escribir toda su aplicación dentro de una plantilla, como ya he dicho. Un par de bucles y hasta diez declaraciones if max.
Y, como todos mencionaron, la sintaxis intuitiva y la facilidad de uso son la clave. Reducen drásticamente la cantidad de errores. Un buen servidor (adicional) cuesta $ 1000, mientras que los salarios de los desarrolladores: para corregir todos los errores derivados de la complejidad de la optimización del rendimiento marginal, son 100 veces más altos.