Pasar al contenido principal

Mejorar el rendimiento en Drupal con Quicklink 2.0

Juraría que había hecho un post hablando sobre el modulo Quicklink cuando salió en 2019, pero no lo he encontrado.

El artículo de hoy es en referencia a la publicación que recientemente ha hecho el equipo de Lullabot (los mantenedores del módulo): https://www.lullabot.com/articles/improve-your-sites-experience-quicklink-20

¿Realmente mejora el rendimiento?

Este módulo, de forma simplificada, lo que hace es precalentar las caches.

En la primera versión del módulo, su forma de funcionamiento tenia problemas graves y afectaba negativamente al rendimiento del servidor.

Era un modulo que yo no recomendaba, sobretodo desde que un cliente me contrató para un análisis de rendimiento de un Drupal y donde detecté que el problema principal era el módulo Quicklink + Webform.

Para entender porque NO lo recomiendo para cualquier web, y que porqué no es un módulo de "solo instalar y no configurar" he de explicar un par de cosas antes.

¿Que hace y como funciona?

Por ejemplo, cuando un usuario entra en la Home de tu web este modulo se encarga de precargar de forma asíncrona las paginas que tienen los links de la Home.

A medida que el usuario hace scroll en la home, se irán haciendo peticiones a los links de tu mismo dominio. Esto significa que solo se precargan los enlaces que el usuario ve actualmente en la pantalla.

Supongamos que tienes una típica web donde en tu Home tienes un menú en la cabecera con cuatro enlaces (los típicos "Quienes Somos", "Servicios", "Contacto", "Precios", ...) y que debajo del menú tienes un texto con algún otro enlace, un par de banners, un listado de categorías y al final de la pagina tienes un listado con los últimos artículos del blog.

El módulo Quicklink cargará los enlaces de arriba hacia abajo. Por tanto supongamos que sin hacer scroll lo que ve el usuario en su pantalla es el menú, el texto y un par de banners. Todos estos enlaces se precargaran sin que el usuario lo note, y luego precargará el resto de enlaces en el momento en que el usuario haga scroll y en su pantalla aparezcan el listado de categorías o el listado de artículos del blog.

Hasta aquí parece buena idea esta implementación, y teóricamente se debería notar un aumento en la velocidad de carga, o almenos es lo que debería notar el usuario al tener las caches precalentadas (o las paginas precargadas o como lo quieras llamar).

Caso en la vida real

En muchas webs hay almenos una pagina que es un agujero negro en lo referente al rendimiento. Las típicas son los formularios con algún sistema anticaptcha que deshabilitan las caches (por ejemplo el formulario de registro o paginas de contacto implementadas con el módulo webform) o listados hechos con views que por algún motivo no conviene tener en cache (search_api + facets, listados con orden aleatorio, o listados que son únicos para cada usuario).

En resumidas cuentas, Quicklink carga paginas que son agujeros negros en lo referente al rendimiento. Y el mayor problema es que normalmente son paginas con pocos acceso por parte de los usuarios, pero que quicklink hace que se carguen siempre.

Imaginemos que tenemos 1000 visitas a nuestra Home, y que de todos esos usuarios solo 10 van a la pagina de contacto. Inicialmente solo esas 10 personas van a tener que cargar el formulario de contacto (webform + captcha) y por tanto solo hemos invalidado las caches de esas 10 paginas. Del resto de las 990 visitas, solo 500 siguen navegando por la web, el resto solo es gente que ve la Home y hace rebote al dejar de navegar porque no le interesa lo que ve.

En este punto tenemos 1000 visitas de la home + 500 visitas a otras paginas + 10 visitas sin cache.

Ahora supongamos que instalamos Quicklink. Por defecto tendríamos 1000 visitas multiplicado por el numero de enlaces visibles en la pantalla del usuario. Para hacer números redondos supongamos que solo hay 10 enlaces visibles (entre los cuales tenemos el de la pagina de contacto).
Entonces tenemos 1000 X 10 = 10.000 solicitudes al servidor, de las cuales 1000 son a la pagina de contacto la cual invalida las caches porque tiene un captcha para evitar los envios de Spam de bots.

Y a esto se le suma que si tenemos 500 usuarios que acaban yendo a otra pagina entonces tenemos 500 x 10 = 5000

Comparativa:

  • sin Quicklink: 1510 peticiones al servidor. Solo 10 peticiones lentas.
  • Con Quicklink: 10.000 + 5000 + 00 = 15.010 peticiones de las cuales 1000+500 son peticiones inútiles a la pagina de contacto

Creo que queda claro que estamos saturando el servidor. Y si no te queda claro entonces te aseguro que se nota en la CPU y que te puede tumbar la web en el momento que tienes muchas visitas, ya que es un efecto multiplicador.

Por ese motivo no recomiendo instalar el modulo Quicklink a menos que sepas lo que estas haciendo.

Y por cierto, si tienes una web con varios idiomas entonces estos números son mucho peores, ya que en todas las paginas tendrás enlaces a varias urls (sus traducciones) y normalmente los usuarios no cambian de idioma si han llegado desde Google.

¿Para quien puede serle útil Quicklink?

O para webs pequeñas con muy pocas visitas, o para webs que tienen un equipo que sabe muy bien lo que hace y que paginas se han de excluir.

Quicklink no es una solución mágica para hacer que la web vaya más rápida. Todo lo contrario, puede afectar muy negativamente al servidor y ralentizar todo el sistema.

Configuraciones a tener en cuenta

Todo esto que he comentado arriba es si no configuras correctamente el módulo, o si no usas la v2.

Por lo que veo, en la v2 que acaban de sacar puedes configurar que enlaces quieres ignorar para que no se precarguen.

  • Puedes ignorar rutas, por ejemplo "/contacto"
  • O ignorar selectores css, por ejemplo para ignorar todos los enlaces del menú del header o del footer o el selector de idiomas.

También en la V2 ahora puedes configurar un limite y un tiempo de espera. Y esto es de muy agradecer para evitar sobrecargar el servidor con muchas peticiones inútiles.

En cualquier caso, Quicklink es un módulo potente que en determinados proyectos puede ser muy útil. Pero no es un módulo que se pueda recomendar a gente inexperta para "mejorar el rendimiento de forma mágica y sin esfuerzo".