John Kleinschmidt - Surviving the Offline Apocalypse
JSConf US 2013
29 May 2013Offline matters: Hospital/remote/etc for US Globally - much more important (Africa, other 3rd world etc - connectivity 10 yrs behind US - spotty at times, could be mobile) Your server(s) could be unavailable
“Offline first” design - assume you’re offline make sure functionality works while offline
Live off the grid - Application Cache
- it’s kind of a jerk (But it works well) cache manifest CACHE - files required for offline usage (browser will download and cache) NETWORK - can be fetched when needed (can be wildcard *)
note - CACHE - these will be served from cache even if online so make part of build step to update the manifest to give latest version
Good browser support - forget about IE < 10 and Opera Mini
Supplies: IndexedDB
object store - key/value pairs - noSQL DB
- heavily Async
- versioning (window.indexedDB.open(‘databasename’, VERSION_NUMBER)) -> request.onupgradeneeded
Chrome Dev Tools give good insight in to the indexedDBs you create Browser support - not perfect (iOS safari doesn’t though) - polyfill available that covers all but opera mini. Native support by Firefox & Chrome, plus IE 10+
Adequate Weaponry: Filesystem API
- sandboxed files stored for your app only
- provides local url to that file
- persistent (until deleted) or temporary (lasts for the session)
- must request access
- async API
Browser support: Chrome only, polyfill available for IndexedDB (extends support to those who support IndexedDB)
Escape Plan
navigator.onLine (“might” be online = true, definitely offline = false) XHR to see if actually able to reach anything window.on(‘online’) - hey we’re online, window.on(‘offline’) - oh we’re offline, XHR to do an action - if fails, we’re offline, etc.
Cure already saved over 9000 kids with their offline app - awesome!
slides: jkleinsc.github.io/jsconf13
twitter @jkleinsc
www: cure.org
blog: resplendentdev.com
Video
JSConf 2013
This is a quick summary of a talk I attended at JSConf 2013. You can see a list of all those I've summarized notes from here. There's also a General thoughts during JSConf 2013 post for all the non-talk bits and pieces.
There were 3 concurrent tracks at the conference, so only those I attended myself are summarized here. Other attendees have summarized some of the talks I didn't get to due to scheduling conflicts - you can find those at jlongster.com (James Long) and Toby Ho's github repo.