Save 37% off PRO during our Black Friday Sale! »

Browsers behind your back at 4Developers 2017

Browsers behind your back at 4Developers 2017

You’ve probably heard of the magic of a Service Worker when a user is offline, but what can we do for them when they get back online? We can take advantage of the Service Worker’s life outside of the page and start to perform actions in the background.

In this talk we’ll investigate the Background Sync API and the APIs that it depends upon, we’ll look at what you might use it for and see it in action. Once that is behind us we can take a peek into the future and even more background tasks with a look at the Periodic Sync API.

--

Links:

Build the demo from the talk: https://www.twilio.com/blog/2017/02/send-messages-when-youre-back-online-with-service-workers-and-background-sync.html
The app from the demo: https://github.com/philnash/sms-messages-app/tree/background-sync
Background Sync explainer: https://github.com/WICG/BackgroundSync/blob/master/explainer.md

Background Fetch API: https://github.com/WICG/background-fetch

8ec1383b240b5ba15ffb9743fceb3c0e?s=128

Phil Nash

April 03, 2017
Tweet

Transcript

  1. BROWSERS BEHIND YOUR BACK

  2. PHIL NASH @philnash http:/ /philna.sh philnash@twilio.com

  3. BROWSERS BEHIND YOUR BACK

  4. EMAIL IS PRETTY COOL @philnash

  5. None
  6. ON THE WEB? @philnash

  7. PROGRESSIVE WEB APPS

  8. @philnash

  9. SENDING MESSAGES @philnash

  10. LIKE OR FAVOURITE @philnash

  11. ADD SHOPPING TO CART @philnash

  12. LEAVING A COMMENT @philnash

  13. @philnash

  14. BACKGROUND SYNC API

  15. BACKGROUND SYNC API • Service Worker • IndexedDB • Sync

    Event @philnash
  16. DEMO

  17. SERVICE WORKER

  18. @philnash

  19. @philnash

  20. @philnash

  21. DEMO

  22. INDEXEDDB

  23. @philnash

  24. OBJECT STORE @philnash

  25. ASYNCHRONOUS @philnash

  26. TRANSACTIONAL @philnash

  27. LOW LEVEL @philnash

  28. USE A LIBRARY • idb • localForage • Dexie •

    PouchDB @philnash
  29. SERVICE WORKERS LOVE PROMISES @philnash

  30. CALLBACKS var request = indexedDB.open('messages', 1) request.onupgradeneeded = function(event) {

    var upgradeDb = event.result.target; upgradeDb.createObjectStore('outbox', { autoIncrement : true, keyPath: 'id' }); } request.onsuccess = function(event) { window.db = event.result.target; } 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. @philnash
  31. PROMISES idb.open('messages', 1, function(upgradeDb) { upgradeDb.createObjectStore('outbox', { autoIncrement : true,

    keyPath: 'id' }); }).then(function(db) { return window.db = db; }) 01. 02. 03. 04. 05. 06. 07. @philnash
  32. DEMO

  33. BACKGROUND SYNC API

  34. @philnash

  35. @philnash

  36. BACK ONLINE API

  37. SUPPORT 49 beta devdevdevboo @philnash

  38. ON THE PAGE navigator.serviceWorker.ready.then(function(reg) { reg.sync.register('back-online'); }); 01. 02. 03.

    @philnash
  39. IN THE SERVICE WORKER self.addEventListener('sync', function(event) { if (event.tag ===

    'back-online') { // do something } }); 01. 02. 03. 04. 05. @philnash
  40. DEMO

  41. THE FUTURE

  42. BACKGROUND FETCH API

  43. ON THE PAGE navigator.serviceWorker.ready.then(function(reg) { const url = "https://example.com/largeFile.mp3"; reg.backgroundFetch.fetch('downloads',

    [url], { icons: [], title: 'Downloading largeFile.mp3', totalDownloadSize: 1048576 }); }); 01. 02. 03. 04. 05. 06. 07. 08. @philnash
  44. IN THE SERVICE WORKER self.addEventListener('backgroundfetched', function(event) { if (event.tag ===

    'downloads') { event.updateUI('largeFile.mp3 downloaded.'); } }); 01. 02. 03. 04. 05. @philnash
  45. IN THE SERVICE WORKER Other events: • backgroundfetchfail • backgroundfetchabort

    • backgroundfetchclick @philnash
  46. PERIODIC SYNC API

  47. ON THE PAGE navigator.serviceWorker.ready.then(function(reg) { reg.periodicSync.register({ tag: 'get-latest-news', // default:

    '' minPeriod: 12 * 60 * 60 * 1000, // default: 0 powerState: 'avoid-draining', // default: 'auto' networkState: 'avoid-cellular' // default: 'online' }); }); 01. 02. 03. 04. 05. 06. 07. 08. @philnash
  48. IN THE SERVICE WORKER self.addEventListener('periodicsync', function(event) { if (event.tag ===

    'get-latest-news') { // get the latest news! } }); 01. 02. 03. 04. 05. @philnash
  49. DEMO

  50. BLOG POST http:/ /bit.ly/bg-sync @philnash

  51. THANKS

  52. ICON CREDITS • Browser by Kimmi Studio from the Noun

    Project • Cloud by Kimmi Studio from the Noun Project • Gears by TS Graphics from the Noun Project • Database by Yo! Baba from the Noun Project • wifi by i cons from the Noun Project @philnash
  53. THANKS! @philnash http:/ /philna.sh philnash@twilio.com