Exportación estática en OpenCms

17/11/2010       Sergio Raposo Vargas       Administración, OpenCms

La exportación estática es uno de los mecanismo que OpenCms nos ofrece para mejorar la velocidad de carga de nuestras páginas. El sistema consiste en hacer una exportación a disco del html resultante de renderizar nuestros contenidos con nuestras plantillas desarrolladas. Es decir, se generará un fichero .html en disco que será una "imagen" de lo que se vería si llamasemos directamente a la página desde OpenCms.

La exportación estática hace que, el acceder a nuestras páginas en Online se haga directamente a la imagen que tenemos en disco, por lo tanto, lo que el servidor tiene que hacer es servir directamente el fichero .html y sus recursos relacionados (css, imagenes, scripts). Al no tener que ejecutarse ningún código de forma dinámica la respuesta del servidor será inmediata y tan solo tendremos el problema de lo que tarde en llegarle la información al navegador del usuario y lo que este tarde en procesarla.

Este sistema sería como si nuestra web fuera una web estática en html con la ventaja de que los contenidos están siendo gestionadas por un Gestor de Contenidos y todas las ventajas que esto conlleva.

Pero como todo, esta técnica trae consigo algunos incovenientes que paso a comentar:

  • Nada de código dinámico. Estoy comentando que lo que hace OpenCms es generar un fichero .html con todo el documento y guardarlo en disco, esto que implica, que cuando se acceda al fichero, el servlet de OpenCms no va a actuar, se llama directamente al fichero, y por lo tanto, no se puede ejecutar nada. Esto que implica, pues que no podremos tener formularios de contacto, buscador, comentarios a los contenidos, valoración, zona privada, ..., es decir, no podemos tener nada que requiera ser ejecutado.
  • El encoding. En el proceso de exportación a disco son muy comunes los errores en temas de encoding, que se pierdan las tildes y ñ cuando se van a disco y tal. Para evitar este tipo de problemas hay que ser muy cuidadosos a la hora de configurar nuestros servidor e intentar que todo tenga la misma configuración, es decir, que si nos decidimos por UTF-8 o ISO-8859-1, todo use ese mismo encoding, nos ahorraremos muchos dolores de cabeza, os lo aseguro :P.
  • El momento de la exportación. El momento de la exportación es otro gran problema. Existe dos posibles configuraciones, una es que se exporte con la primera visita a la página, y otra que se exporte una vez que se publica. Cada uno tiene sus problemas y sus inconvenientes, si estamos editando y publicando constantemente, se está exportando a disco demasiado a menudo y, claro está, el rendimiento de la máquina puede verse afectado. Si por el contrario usamos la otra configuración, que se exporte con la primera visita, la primera visita tendrá una alta penalización, pero el resto de consultas ya no necesitará la exportación y se servirán los contenidos automáticamente desde disco. Cada página se exportará en momentos distinto lo que cargará menos el sistema.
  • Páginas relacionadas. En un mundo perfecto cuando exportamos un contenido, por ejemplo una noticia, tan solo tendriamos que exportar la noticia en sí, pero claro, la realidad es otra. ¿Qué pasa con el listado de noticias? ¿Qué pasa con la home? Si tenemos listados de noticias en otras páginas, tendríamos que indicarle al sistema que estas páginas también deben ser actualizadas ya que en caso contrario la nueva noticia no se vería reflejada en los listados. Esto trae muchos problemas consigo. OpenCms trae un sistema de reglas de exportación que nos permite configurar las páginas relacionadas que hacen que, cuando se añada un contenido nuevo o se edite, que se debe exportar. El problema que este sistema de reglas es complejo y en muchos casos no resuelve del todo el problema. Imaginaros por ejemplo que lo que se ha creado es una nueva sección en el menú de navegación, esto implicaría una exportación completa de la web a disco ya que todas las páginas se habrían quedado obsoletas. Por ello, en muchos casos se puede optar por exportar toda la web siempre que se modifique un contenido, así nos quitamos del medio el problema, pero nos surge otro gran problema, que es el rendimiento del sistema, si cada vez que cambiemos algo en nuestros contenidos tenemos que exportarlo todo, puede reducir mucho el rendimiento del sistema, y evidentemetne, mientras más recursos, peor!!.

 

Bueno, bajo mi experiencia en el tema, la exportación estática es una muy buena opción pero solo para algunos casos muy concretos como por ejemplo:

  • Pequeñas web de información donde la edición de los contenidos es rara y no se aplica ningún tipo funcionalidad avanzada.
  • Para secciones concretas de una web en la que la edición es muy esporádica.
  • Para sitios de alto tráfico en puntos concretos como la portada o alguna sección que requiera de alta disponibilidad en un momento en concreto (listados de notas, etc ...), donde se puede tener muy controlado esos puntos para evitar sobre cargar el sistema con muchas peticiones.

Recuerda que OpenCms brinda un gran servicio que nos puede ser de gran utilidad en momentos puntuales, pero que no es válido para todos los proyectos. Os aconsejo que hagáis un estudio profundo antes de lanzaros a exportar una web a disco.

Para otro día comentaré como se configura la exportación estática y como podemos empezar a usarla, mientras tanto, recordar que tenéis la documentación oficial de OpenCms.