Como saber si un usuario utiliza la última versión en una SPA

El problema

Una web SPA es usada como herramienta de trabajo diario por sus usuarios.

Como es obvio, muchos usuarios mantienen muchas tabs abiertas en sus navegadores.

Más de las que pueden recordar.

Y por supuesto, nadie tiene tiempo de apagar el ordenador. Se pone en reposo y hasta la próxima

Esto es un problema para cualquier equipo de desarrollo ágil que hace muchos despliegues diarios. Pues sus usuarios es posible que estén utilizando versiones antiguas.

Algunos, con versiones muy antiguas.

Pues bien. ¿Cómo harías para actualizar la web a esos usuarios que mantienen las tabs abiertas por siempre jamás?

Recuerda, SPA, client-side navigations, etc.

La solución

Como bien recordarás, toda SPA tiene un index.html común.

Pues bien, en el <head/> de ese HTML añadí un <meta/> con la versión de la aplicación.

Esta versión corresponde al commit sha que hace lanzar el despliegue. Se añade en tiempo de compilación.

Con esto, tienes la mitad del problema resuelto. Cada SPA conoce su versión.

Y ahora bien. ¿Cómo una versión sabe si es la última o no? ¿Qué debe hacer en caso de que no lo sea?

Para ello, hice una pequeña función que hace un fetch a la misma URL de la página que ve el usuario.

Esto devolverá un HTML y este HTML sí es el de la última versión.

¡Ahá! Ahora solo falta comparar las versiones para ver si el usuario está en la última.

¿Cuándo harías esta comprobación?

En este caso, hice una comprobación en cada navegación del usuario, de forma que si no está en la última versión, en vez de hacer una navegación client-side, fuerzo una navegación server-side.

De esta forma se actualiza la SPA a la última versión de forma transparente.

Creo que es una solución bastante simple y elegante.

¿Qué opinas? ¿Lo habrías resuelto diferente?