Search code examples
htmlhtml5-appcache

HTML5 Application Cache: incrementally add/remove items?


Imagine the following situation: a user comes to the website and he plans to use it offline. So we cache the items /a, /b and /c. Then the Appcache manifest should look like this:

CACHE MANIFEST
# user foo

CACHE:
/a
/b
/c

NETWORK:
*

A day later he comes back and the user would also like to use /d offline. So we would change the manifest to:

CACHE MANIFEST
# user foo

CACHE:
/a
/b
/c
/d

NETWORK:
*

Now question: can we prevent the user's browser from refetching /a, /b and /c?

And is the inverse possible? I.e. removing a resource without refetching the rest?


Solution

  • No, according to the spec, if the manifest has changed then all the resources are downloaded and cached again.

    http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#appcacheevents : When the user visits a page that declares a manifest, the browser will try to update the cache. It does this by fetching a copy of the manifest and, if the manifest has changed since the user agent last saw it, redownloading all the resources it mentions and caching them anew.

    Edit: I don't generally work in Firefox, but their documentation has the following caveat: If the manifest file has changed, all the files listed in the manifest—as well as those added to the cache by calling applicationCache.add()—are fetched into a temporary cache, following the appropriate HTTP caching rules. For each file fetched into this temporary cache, the browser sends a progress event to the applicationCache object. If any errors occur, the browser sends an error event, and the update halts.

    So, if the cache was sufficiently long on a,b,&c maybe they wouldn't be downloaded again? With Safari, I seem them downloaded again.