Admitámoslo, AppCache es molesta y tiene problemas [1, 2, 3]. Una gran limitación es el hecho de que es imposible almacenar recursos en caché de forma dinámica a pedido. En esencia, esto hace que sea una cosa (o nada) cuando se trata de dejar una app sin conexión. Todo lo que se encuentra en el manifiesto se almacena en caché por adelantado o nada.
La API de FileSystem de HTML5 se convierte en una solución atractiva para las deficiencias de AppCache. Se pueden almacenar archivos y jerarquías de carpetas de forma programática en el sistema de archivos local (zona de pruebas) y, luego, agregar, actualizar o quitar recursos individuales según sea necesario. Mi colega, Boris Smus, incluso escribió una bonita biblioteca para administrar este tipo de almacenamiento en caché sin conexión en el contexto de los juegos. Se puede extrapolar la misma idea para que funcione con cualquier tipo de aplicación web.
crbug.com/89271 es una corrección importante para la API de FileSystem que hace que las rutas de acceso relativas de sistema de archivos: URL funcionen como un atajo.
Por ejemplo, supongamos que guardé index.html en la carpeta raíz del sistema de archivos (fs.root
), creé una carpeta img y guardé "test.png" allí. La URL filesystem:
de esos dos archivos sería filesystem:http://example.com/temporary/index.html
y filesystem:http://example.com/temporary/img/test.png
, respectivamente. Luego, si quería usar "test.png" para un img.src
, necesitaba usar su ruta de acceso absoluta completa: <img src="filesystem:http://example.com/temporary/img/test.png">
. Eso significó reescribir todas las URL relativas en index.html para que apunten a la URL filesystem:
del archivo correspondiente. ¡No está bien! Ahora, con esta corrección de errores, puedo conservar la ruta de acceso relativa al archivo (<img src="img/test.png">
), ya que se resolverán correctamente en un origen del sistema de archivos.
Esta función permite desplegar una página y guardar todos sus recursos sin conexión, a la vez que conserva la misma estructura de carpetas que la versión en línea.