Quiero desarrollar una aplicación web progresiva con capacidad sin conexión.
Mirando un ejemplo de una aplicación de este tipo, airhorner, encuentro que usa una versión específica de la aplicación para asegurarse de que se cargue la versión correcta.
https://github.com/GoogleChromeLabs/airhorn/blob/main/app/sw.js#L21
Sin embargo, ¿qué sucede con la versión anterior? ¿Necesito limpiarlo? Mi aplicación es bastante grande porque contiene muchos datos (html+js ~1,5 MB) y, por lo que leí en iOS, hay un límite de 50 MB de caché por aplicación.
Entonces, me pregunto si debo asegurarme de eliminar el caché de versiones anteriores o simplemente puedo asumir que es caché y se eliminará porque es demasiado antiguo.
si necesito eliminar la versión anterior, ¿dónde está el lugar correcto para llamarla?
Veo en https://stackoverflow.com/a/45468998/66522 que se llama para activate evento. ¿Puedo simplemente agregar otro detector de eventos en este evento además de este? https://github.com/GoogleChromeLabs/airhorn/blob/main/app/sw.js#L40
Un caché es volátil. El navegador puede optar por eliminar todo, o nada, en un momento dado. (Ref: Eliminar caché )
Dicho esto, es una práctica común limpiar después de ti mismo. Esto se vuelve especialmente importante cuando tienes una limitación de 50Mb; No desea que el navegador borre automáticamente un caché válido.
Debe realizar cualquier tipo de limpieza en el evento de activate , de modo que cualquier ServiceWorker antiguo y activo aún pueda funcionar hasta que el nuevo ServiceWorker haya reclamado a todos los clientes (Activarse).
Aquí hay un ejemplo de cómo administrar el caché en un ServiceWorker.