Gmail for mobile HTML5 Series: Using AppCache to Launch Offline - Part 1
On April 7th, Google launched a new version of Gmail for mobile for iPhone
and Android-powered devices built on HTML5. We shared the behind-the-scenes story through
this
blog and would like to share more of our learnings in a brief series of follow up
blog posts.
The HTML5 draft adds a lot of exciting functionality to
browsers. Perhaps the most exciting is adding a way for websites to be launched offline. For
devices that have a high bandwidth and highly available connection, offline functionality
might not be so important. For web applications running on mobile devices however, being able
to launch offline can dramatically improve the web application experience.
AppCache
support on the iPhone is still under development, but as of firmware 2.2.1, it is usable.
To make use of AppCache, a webpage must provide a "manifest" to the
browser that lists all of the URLs that it intends to use. Creating an HTML5 manifest file is
extremely simple, as shown by the following example.
CACHE
MANIFEST
jsfile1.js
jsfile2.js
styles.css
/images/image1.png
/images/image2.png
It is
important to note that it is not necessary to list the URL of the main webpage in the manifest
because it is treated as an implicit entry. However, if you have more than one top level URL
that you want to be available offline, they must all be listed in the manifest. In addition,
they must all set a manifest attribute on the HTML tag that points to the manifest. For
example, if the manifest URL was "/sitemanifest", then each page in the site would have an
HTML tag that looked like this:
<html
manifest="/sitemanifest">
Finally, the manifest must be
served using the content type "text/cache-manifest". And that's it!
So
now that you know how to create a manifest for your site, it's a good idea to know what's
going on during page load. When the page is loaded for the first time, it will load as if
there is no application cache associated with it. Once it has finished loading, the browser
will fetch the manifest and all resources listed in it that have not already been fetched
during page load. From this point on, any GET request that your page makes that is not listed
in the manifest will fail, and any GET request that is listed in it will not hit the network,
but will be satisfied by the cache. Once your page is loaded into AppCache, the next time the
user loads the site, all of the resources will be served out of the cache. The only GET
request done on page load will be for the manifest file, in order to see if it has changed. If
it has changed, then all of the resources in it are fetched in the background and will be used
the next time the user refreshes the page.
Stay tuned for the next post
where we will share more about what we know about AppCache and how we use it on the Gmail
team. Also, we'll be at
Google I/O, May 27-28 in San Francisco presenting a
session on how we use HTML5. We'll also be available at the
Developer
Sandbox, and we look forward to meeting you in person.
ReferencesThe HTML5 working draft:
http://dev.w3.org/html5/spec/Overview.htmlApple's MobileSafari documentation:
http://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariJSRef/DOMApplicationCache/DOMApplicationCache.htmlWebkit Source Code:
http://trac.webkit.org/browser/trunk/WebCore/loader/appcacheBy Andrew Grieve, Software
Engineer, Google Mobile