09/01/2016

Static site generators: el futuro de las webs estáticas (Hugo, Jekyll, Flask y otros)


Eneko Sarasola

En Sitelabs tenemos muy presente que los CMS (gestores de contenido) conforman una gran parte de la web (cerca de un 45%), y la cifra es mucho mayor si hablamos de webs para PYMES, donde WordPress es, de lejos, el sistema de gestión de contenidos más popular. Su ecosistema de plugins, ofreciendo casi cualquier funcionalidad bajo el sol (dentro de las propias limitaciones de la plataforma) lo convierten en la mejor opción a la hora de crear una web de una forma fácil y rápida.

Sin embargo, herramientas como WordPress ofrecen muchas ventajas con un coste que en algunos casos puede convertirse en una gran desventaja: el rendimiento. Viendo este nicho, desarrolladores de todo el mundo han propuesto diferentes soluciones que ofrecen una gestión de contenidos intuitiva sin sacrificar el rendimiento; la gran mayoría de estas herramientas están categorizadas bajo el nombre de generadores de páginas estácticas o static site generators. Veamos cuales son sus características y como pueden contribuir a un desarrollo más fácil y un mejor rendimiento.

Los static site generators dejan de lado el uso de la base de datos, un elemento de los CMS que mayor latencia genera, y se centra en el uso de ficheros para gestionar el contenido de la web. Sin embargo, la gestión de estos ficheros difiere mucho de una herramienta a otra: algunos ofrecen un editor WYSIWYG como WordPress que edita el contenido de los ficheros, otros proponen que edites tus archivos en formato Markdown para después ser transformados en código HTML, y otros implementan sistemas de plantillas como Twig o Jade para construir las páginas. La forma de construir las plantillas es uno de los factores decisivos a la hora de escoger un generador u otro y depende básicamente de las preferencias personales del desarrollador. Lo cierto es que la gran mayoría de webs corporativas no son lo suficientemente complejas para necesitar una base de datos, al ser en su gran mayoría página que muestran información estática.

markdown-static

Funcionalidades diversas

La funcionalidad de los generadores de páginas estáticas también varían dependiendo de su objetivo: algunos se limitan a ofrecer las comodidades de las parciales, es decir, separar nuestros archivos HTML en módulos para su reutilización; otros nos dan la opción de definir rutas para nuestras plantillas, es decir, crear URLs “bonitas” y apuntar a nuestras plantillas con las mismas como Guzzle en varios frameworks PHP; y otros nos ofrecen suites completas donde podemos sacar el jugo a opciones como caché y minificación automáticos, jerarquización de páginas o incluso sistema de usuarios database-free. Por norma general, todos los generadores de páginas estáticas se dividen entre los minimalistas y los más equipados, aunque también tenemos que tener en cuenta que algunos son generalistas mientras que otros estan fuertemente “opinionados”. Elegir uno u otro depende de las necesidades de cada proyecto así como de los gustos del equipo de desarrolladores.

Un rendimiento inmejorable

El hecho de prescindir de una base de datos hace que los tiempos de carga sean extremadamente rápidos: para cargar todo el HTML al servidor solo le hace falta leer el contenido del archivo y mandarlo como respuesta. A menudo las páginas que dependen de una base de datos realizan múltiples queries, y cada una de ellas suma latencia a la petición del cliente. Además, al no necesitar más que un servidor web y un lenguaje para el backend, (aunque cada vez surgen más generadores que sólo se basan en lenguajes de cliente y un compilador frontend que lo organiza todo) el alojamiento del sitio web se simplifica y por ende se abarata mucho, permitiéndonos responder muchas más peticiones por segundo y alojar más webs en un mismo servidor, ya que un proceso de mySQL o MongoDB consume muchos recursos mientras se ejecuta.

Generadores de páginas estáticas especializados

No olvidemos que dependiendo del proyecto que tengamos que crear, existen generadores especializados en un tipo concreto de páginas web. Por ejemplo, GitBook se especializa en generar documentación para nuestros repositorios en Git de forma automatizada, Jekyll se encarga de hacer que publicar y mantener un blog sea muy sencillo y rápido, o Hugo posibilita que el proceso de despliegue de una web sea increíblemente sencillo, ya que genera un ejecutable binario que solamente tendremos que subir al servidor y ya estará funcionando. Aunque existan herramientas como estas especializadas en mejorar la experiencia del usuario en casos concretos, la mayoría de ellas intentan abarcar la mayor cantidad de use cases posibles, siempre dentro de sus limitaciones.

De forma similar a la solución que proponen los generadores de páginas estáticas a los grandes gestores de contenidos, existe una alternativa más ligera a los principales frameworks que se hacen más pesados según evoluciona Internet: los microframeworks. Estos son de gran utilidad para crear microservicios para propósitos específicos. Por ejemplo, si queremos crear una API que conecte con una base de datos y que simplemente muestre y guarde datos en la misma, y intercambiar dichos datos en formato JSON con el cliente (que podría ser, por ejemplo, una app móvil), un microframework sería la apuesta ideal, ya que no consume excesivos recursos y cumple su cometido de forma eficaz y rápida. Dos ejemplos de microframeworks son Flask para Python y Lumen, basado en el framework PHP Laravel.

En Sitelabs creemos que los generadores de páginas son una apuesta segura y que eventualmente desplazarán a los sistema de gestión de contenidos. Sin embargo, el ecosistema de herramientas aún tiene que madurar y diversificarse para convertirse en una alternativade calidad a los grandes proyectos que dominan Internet, como WordPress o Drupal. En los siguientes años veremos como se diversifican las webs estáticas y empiezan a adoptar este enfoque más simple, rápido y seguro.