performance - Heavyblade/cirrus GitHub Wiki

Para optimizar el performance http y poder construir una aplicación rápida Cirrus.js incluye:

  • Caché de rutas: las rutas solo se construyen en el primer request y de ahí en adelante solo se parsean.
  • HTML, Js y Css desde tablas en Memoria: Para que la lectura de los templates desde disco no sea un obstáculo los templates y assets se sirve desde una tabla en memoria que toma los contenidos en disco y los cachea.
  • Cirrus Workers: Es la posibilidad de levantar Cirrus.js en varios puertos al mismo tiempo y mediante un load balancer aumentar la capacidad de concurrencia y dejar a Cirrus.js como un back-end.

Importancia del Front-End HTTP Server:

arquitectura

Si bien Cirrus.js puede servir el HTML, JSON, js o CSS directamente de cara a usuario, tanto por performance como por seguridad el esquema a recomendar es tener un web server como Apache o Nginx que le haga frente a internet, dado que estos servidores manejan mucho mejor la concurrencia, Https, pueden mantener la conexiones por más tiempo, pueden usar gzip para enviar la data y otras muchas características que se les pueden afinar para mejorar tiempos de respuestas y la seguridad, dejando a Cirrus.js en el backend.

Cirrus.js vs vModApache:

Como la comparación es inevitable aquí expongo nuestras consideraciones acerca de cada producto, lo primero sería indicar que ambos productos apuntan a ámbitos diferentes => Cirrus.js esta pensando para aplicaciones pequeñas o medianas, pues este server fue implementado con el objeto TCP de v7 que aunque muy funcional no tiene toda la flexibilidad necesaria para manejar concurrencia a alto nivel y los procesos de v7 no tiene capacidad multi-hilo programable, a pesar de ello para incrementar la capacidad de concurrencia Cirrus.js toma el enfoque de hacer algo similar a un fork, es decir, levantar varias veces el mismo procesos sobre varios puertos.

vModApache por su parte además de ser una implementación nativa sobre el servidor web Apache con lo que ello implica para el performance, tiene además la grandísima ventaja de contar con 2 importantes características: caché y refresco terciario, por lo que correr vModApache en modo worker contra un vServer reduce el tiempo de acceso a disco dada su cache y además esta se mantiene actualizada gracias al refresco terciario, con lo que pueden lograr esquemas muchos más robustos y por supuesto potentes.

pros y contras de cada servidor:

Cirrus.js

Pros:

  • Implementación tipo MVC, que permite estructurar mejor el código en cuento a los rutas, controladores y vistas, generando aplicaciones REST y API's de una forma más sencilla y estructurada.
  • Router más flexible para definir estructuras REST y rutas como parámetros personalizables.
  • Manejo de sesiones directamente en los controladores.
  • Implementación de templates dinámicos usando Handlebars.
  • Cirrus.js workers atendiendo requests desde distintos puertos.
  • Editor visual de código para las vistas sin necesidad de parsear cadenas de texto en procesos.
  • Rendimiento más que satisfactorio.
  • No consume licencias al vServer

Contras:

  • Proyecto joven aún no tiene muchas implementaciones o por lo menos no de manera pública, por lo que su estabilidad y robustes en producción están por ser probadas.
  • Solo podrá soportar HTTP 1.0, dado que las versiones 1.1 y superiores requieren de un uso más flexible y complejo del protocolo TCP y el objeto TCP de v7 no tiene dicha flexibilidad y probablemente nunca la tenga.
  • Al ser open-source su crecimiento y soporte depende del tiempo y voluntad de sus mantainers.

vModApache

Pros:

  • Implemetación nativa sobre uno de los mejores web servers disponibles, por lo que aprovecha directamente sus funcionalidades y potencia.
  • Cache y refrescos terciarios, tal como lo menciona David Gutiérres en su charla (http://www.youtube.com/watch?v=fl2XXX97ahk), el vModApache tiene todas las virtudes de un vClient.
  • Accesso directo a procesos disponibles para web, sin necesidad de un router.
  • Altamente escalable por definición.
  • Soporte y crecimiento depende de una empresa, aunque se tiene que ser Nivel 3 o superior para usarlo, cuando se haga se tiene acceso a soporte y el desarrollo de la herramienta tiene un respaldo.

Contras:

  • Accesso directo a procesos disponibles para web: al no haber un router o equivalente para proyectos grandes el mantenimiento de puntos de acceso puede ser complejo.
  • Aun tiene el label de "Beta".
  • Consume licencias adicionales del vServer al ser una especie de vClient.
  • No tiene acceso a cookies y sessiones.
  • Solo accesible para Niveles 3 o superior.
  • La edición del codigo HTML o JSON puede llegar a ser tediosa por manejar composición de cadenas en los procesos.