Modo offline

Existe una forma rápida de hacer que una aplicación copie los ficheros estáticos en el dispositivo del usuario y hacer que nuestra aplicación funcione rápido con conexiones lentas (además de ahorrar al usuario tráfico de datos de su conexión). Se trata de crear un archivo de manifiesto para caché.
Tiene 3 patas:

  • Una indicación desde el HTML de que existe la caché.
  • Un fichero con la información.
  • El servidor web ha de mostrar el fichero con unas cabeceras específicas.

La parte del HTML es muy sencilla sólo hay que añadir manifest=”fichero.extension” a la etiqueta, por ejemplo:

Ahora crearemos un fichero cache.manifest en la misma carpeta que nuestro index.html y para ofrecer las cabeceras correctas habrá que añadir al archivo .htaccess del servidor el siguiente contenido:

	DirectoryIndex index.html
	Options -Indexes
	AddType application/x-web-app-manifest+json .webapp
	AddType text/cache-manifest .manifest

Aprovechamos la edición de este archivo para indicar que no se liste el contenido de las carpetas y que el archivo por defecto a listar en un directorio es index.html

Contenido del archivo de caché

La primera línea tendrá escrito: CACHE MANIFEST

Las líneas que empiecen por una almohadilla son comentarios, habitualmente se deja la segunda línea para la versión del archivo dentro de un comentario.

Cada línea será una ruta relativa (desde la ubicación del fichero de caché) o absoluta a un fichero que se quiere guardar en la caché.

Existen 2 secciones opcionales:

  • NETWORK: Para ficheros dinámicos (por ejemplo una aplicación de conversión de divisas tiene que poder consultar esa información actualizada). Los ficheros de esta sección no son cacheados y son consultados cada vez que se intenta acceder a ellos.
  • FALLBACK: En los casos que no exista conexión a internet se mostrará este fichero, en lugar del habitual (por ejemplo en una aplicación de mensajería instantánea en lugar de mostrar la lista de contactos, cuando no exista conexión se puede mostrar sólo el historial de conversaciones).

Ejemplo de archivo de caché

CACHE MANIFEST
# v1.0 (esta línea es un comentario)
	index.html
	cache.html
	/css/style.css
	http://localhost/imagenes/imagen1.png

#Cuando hay conexión de red
NETWORK:
	consultas.php

#Cuando no hay red:
FALLBACK:
	/ fallback.html

Enlaces de interés

La ayuda de Mozilla para desarrolladores tiene un extenso artículo sobre la caché de aplicaciones.