85
Of!ine for web Jan Jongboom Frontend Dev Conf 2014

Offline of web applications

  • Upload
    fdconf

  • View
    2.548

  • Download
    0

Embed Size (px)

DESCRIPTION

Jan Jongboom @janjongboom "Offline of web applications" on Frontend Dev Conf'14 www.fdconf.by

Citation preview

Page 1: Offline of web applications

Of!ine for web

Jan JongboomFrontend Dev Conf 2014

Page 2: Offline of web applications

@janjongboomJan, live in Amsterdam. Work for Telenor. Owns part of Vimpelcom. They pay me to work on Firefox OS.

Page 3: Offline of web applications

@janjongboomJan, live in Amsterdam. Work for Telenor. Owns part of Vimpelcom. They pay me to work on Firefox OS.

Page 4: Offline of web applications

Internet is normal for western world, but big part of the world doesnt have it.

Click Only 2.5 billion people out of 7.

Page 5: Offline of web applications

4,500,000,000

Internet is normal for western world, but big part of the world doesnt have it.

Click Only 2.5 billion people out of 7.

Page 6: Offline of web applications

4.5 billion people, all on mobileThese people are going to come online on mobile

Page 7: Offline of web applications

Don’t break their experience!

Mobile users don’t always have an internet connection! Don’t break their experience, build with offline in mind!

Page 8: Offline of web applications

37%Western world, last year. Netherlands already 37% of all traffic is mobile. Will only increase. It’s ALREADY an issue!

Page 9: Offline of web applications

Оффлайн важна!

For years we have been developing with online in our heads, but we should stop treating like offline is still a second class citizen

Page 10: Offline of web applications

Let’s do it!Let’s do something about it!

Page 11: Offline of web applications

Currency converter BYR -> EUR. Price of a beer.- It’s a website. Resources are on a server.- Data comes from Yahoo

Page 12: Offline of web applications

Currency converter BYR -> EUR. Price of a beer.- It’s a website. Resources are on a server.- Data comes from Yahoo

Page 13: Offline of web applications

Currency converter BYR -> EUR. Price of a beer.- It’s a website. Resources are on a server.- Data comes from Yahoo

Page 14: Offline of web applications

When no internet connection -> breaks. Oh noes. We want to fix it.

Page 15: Offline of web applications

The shellApp content

Let me introduce some basic concepts here. An application consists of two parts:

1. The shell2. App Content

Page 16: Offline of web applications

The shell

• All assets

• Distribution through:

• App store

• Publish on web server

• Changes are costly

The shell are all assets that make up your application. Code files, the user interface, images. It's the part that you would distribute through an app store, or the application that you put up on a web server. The shell hardly changes, and if you want to make a change it's a costly one. You would need to re-release your product.

Page 17: Offline of web applications

The shell

• All assets

• Distribution through:

• App store

• Publish on web server

• Changes are costly

The shell are all assets that make up your application. Code files, the user interface, images. It's the part that you would distribute through an app store, or the application that you put up on a web server. The shell hardly changes, and if you want to make a change it's a costly one. You would need to re-release your product.

Page 18: Offline of web applications

App content

• Everything your app serves up

• Pushed down from server

• Highly volatile

• Changes are cheap

The app content is everything your app serves up. News items; the facebook feed. Most of the times it's pushed down to the client via HTTP requests, it's generally short lived and very cheap to update.

Ergo: We need to distinguish between these two types is because they require different caching strategies and techniques, but you can't make an application available without either of these two.

Page 19: Offline of web applications

App content

• Everything your app serves up

• Pushed down from server

• Highly volatile

• Changes are cheap

The app content is everything your app serves up. News items; the facebook feed. Most of the times it's pushed down to the client via HTTP requests, it's generally short lived and very cheap to update.

Ergo: We need to distinguish between these two types is because they require different caching strategies and techniques, but you can't make an application available without either of these two.

Page 20: Offline of web applications

Part I: The shell

So we have a website, it has HTML/CSS/JS and now we want to cache it. There is a technique called appcache. Already in all major browsers, even IE. So you can use it today.

Page 21: Offline of web applications

List all !les, put them in cacheBasically, list all files & put them in the cache.

Page 22: Offline of web applications

AppCacheFirst request

Grabbing jan.com/index.html

manifest.appcache

On first request it looks like this. Browser fetches your HTML page. If it has appcache, it fetches that file and loads all resources. No initial performance penalty.

Page 23: Offline of web applications

AppCacheFirst request

Grabbing jan.com/index.html

Please cache all these !les manifest.appcache

On first request it looks like this. Browser fetches your HTML page. If it has appcache, it fetches that file and loads all resources. No initial performance penalty.

Page 24: Offline of web applications

AppCache2nd request

I need foo/blah

Browser Cache

Second request, if the requested file is already in appcache? OK! No waiting time anymore. If not, go to server.

Page 25: Offline of web applications

AppCache2nd request

I need foo/blah

Browser Cache

Second request, if the requested file is already in appcache? OK! No waiting time anymore. If not, go to server.

Page 26: Offline of web applications

AppCache2nd request

I need foo/blah

200 OK! Browser Cache

Second request, if the requested file is already in appcache? OK! No waiting time anymore. If not, go to server.

Page 27: Offline of web applications

Writing AppCache !leStore as currency.appcache

Appcache is a file on your server. Very easy.

Page 28: Offline of web applications

Writing AppCache !leStore as currency.appcache

Appcache is a file on your server. Very easy.

Page 29: Offline of web applications

Writing AppCache !leStore as currency.appcache

Appcache is a file on your server. Very easy.

Page 30: Offline of web applications

Writing AppCache !leStore as currency.appcache

Appcache is a file on your server. Very easy.

Page 31: Offline of web applications

Tell the browser there is a cache file with attribute

Page 32: Offline of web applications

currency.appcache

JavaScript !le

Browser will ALWAYS show cached version. Updates go by updating the version number in the manifest. Downloads in background.

Javascript APIs available, downloading/progress/noupdate.

Page 33: Offline of web applications

Inspecting AppCache (FF)Tools > Developer > Developer Toolbar

appcache list localhost

Dealing with appcache info, to debug

Page 34: Offline of web applications

Inspecting AppCache (FF)Tools > Developer > Developer Toolbar

appcache clear

appcache validate http://your.appcache

Page 35: Offline of web applications

Inspecting AppCache (Chrome)chrome://appcache-internals/

Chrome has a similar thing under chrome://appcache-internals

Page 36: Offline of web applications

Inspecting AppCache (Chrome)chrome://appcache-internals/

Chrome has a similar thing under chrome://appcache-internals

Page 37: Offline of web applications

Shit you will do wrong

• Setting wrong MIME type

• Have one !le 404

• Not realizing user will always see old version !rst

• Expiration headers on appcache

• Develop with appcache enabled(tip: set wrong MIME type in dev)

Some stuff you will do wrong

Page 38: Offline of web applications

PerformanceAlso useful for performance. Because no need to hit the server. This is data from a web application I built. Pretty simple.

Page 39: Offline of web applications

1500 msEmpty cache

On my home internet connection (60 Mbit, 105 ms. ping to the server) this page renders (including executing all javascript):

And that's on a very simple page that is already highly optimized. As we all know, **speed** is the most important aspect of a web page. Having tools to increase the speed of already highly optimized pages by 250% is insane.

Page 40: Offline of web applications

820 msSubsequent reload

On my home internet connection (60 Mbit, 105 ms. ping to the server) this page renders (including executing all javascript):

And that's on a very simple page that is already highly optimized. As we all know, **speed** is the most important aspect of a web page. Having tools to increase the speed of already highly optimized pages by 250% is insane.

Page 41: Offline of web applications

320 msReload with appcache

On my home internet connection (60 Mbit, 105 ms. ping to the server) this page renders (including executing all javascript):

And that's on a very simple page that is already highly optimized. As we all know, **speed** is the most important aspect of a web page. Having tools to increase the speed of already highly optimized pages by 250% is insane.

Page 42: Offline of web applications

250% speed bumpNot just for of"ine

Page 43: Offline of web applications

Part II: App contentWe talked about the shell, but what’s equally important is what the shell contains

Page 44: Offline of web applications

App content, comes from server. This is calculated using the textbox and data from a server that has currency exchange data.

Page 45: Offline of web applications

App content, comes from server. This is calculated using the textbox and data from a server that has currency exchange data.

Page 46: Offline of web applications

A simple AJAX request

This is how I get the data from the server (simple AJAX request)

Page 47: Offline of web applications

A simple AJAX request

This is how I get the data from the server (simple AJAX request)

Page 48: Offline of web applications

A simple AJAX request

This is how I get the data from the server (simple AJAX request)

Page 49: Offline of web applications

We can store the result in localStorage. key/value store. If no internet, get data from LS.

Page 50: Offline of web applications

We can store the result in localStorage. key/value store. If no internet, get data from LS.

Page 51: Offline of web applications

We can store the result in localStorage. key/value store. If no internet, get data from LS.

Page 52: Offline of web applications

We can store the result in localStorage. key/value store. If no internet, get data from LS.

Page 53: Offline of web applications

We can store the result in localStorage. key/value store. If no internet, get data from LS.

Page 54: Offline of web applications

Something in between to shake up the audience.

Page 55: Offline of web applications

Path caching

You can use similar things to make your application perceivably faster for users via path caching. Guess which way they go.

Page 56: Offline of web applications

Example, BBC is list-detail example. On the left list of news stories. User can click through. We don’t want to wait when we click.

Page 57: Offline of web applications

Example, BBC is list-detail example. On the left list of news stories. User can click through. We don’t want to wait when we click.

Page 58: Offline of web applications

When laoding the front page. Make separate calls to get the data, let it expire. Dont do calls twice. Cache images via normal Image JS thing.

Page 59: Offline of web applications

When laoding the front page. Make separate calls to get the data, let it expire. Dont do calls twice. Cache images via normal Image JS thing.

Page 60: Offline of web applications

When laoding the front page. Make separate calls to get the data, let it expire. Dont do calls twice. Cache images via normal Image JS thing.

Page 61: Offline of web applications

When laoding the front page. Make separate calls to get the data, let it expire. Dont do calls twice. Cache images via normal Image JS thing.

Page 62: Offline of web applications

When laoding the front page. Make separate calls to get the data, let it expire. Dont do calls twice. Cache images via normal Image JS thing.

Page 63: Offline of web applications

Then when getting the story when user clicks: get data from local storage. If no internet, always get it. Tah dah. Works offline!

Page 64: Offline of web applications

Then when getting the story when user clicks: get data from local storage. If no internet, always get it. Tah dah. Works offline!

Page 65: Offline of web applications

Then when getting the story when user clicks: get data from local storage. If no internet, always get it. Tah dah. Works offline!

Page 66: Offline of web applications

Part III: The futureLet’s take a peek into the future

Page 67: Offline of web applications

AppCache

AppCache sounds pretty amazing right? Well, not everyone agrees... Jake Archibald, anyone heard of this guy?

(Lists some key problems with AppCache)

Page 68: Offline of web applications

Give developers !ne-grained control about caching,

without breaking the web

So a new proposal popped up written by Google (and backed up by Mozilla since then). Originally known under `NavigationControllers`, and currently under `ServiceWorkers`. Main goal:

Page 69: Offline of web applications

ServiceWorkersFirst request

Grabbing jan.com/index.html

Page 70: Offline of web applications

ServiceWorkersFirst request

Grabbing jan.com/index.html

For foo/* please consult me!

Page 71: Offline of web applications

ServiceWorkers2nd request

I need foo/blah

Javascript file acts as HTTP proxy now

Page 72: Offline of web applications

ServiceWorkers2nd request

I need foo/blah

Javascript file acts as HTTP proxy now

Page 73: Offline of web applications

ServiceWorkers2nd request

I need foo/blah

200 OK!

Javascript file acts as HTTP proxy now

Page 74: Offline of web applications

Example: registering

Runs in separate thread just like normal worker. Easy feature detection, no support? no registration, nothing happens. This also means that you can *just* build for ServiceWorkers.

This is for the whole domain

Page 75: Offline of web applications

Example: registering

Runs in separate thread just like normal worker. Easy feature detection, no support? no registration, nothing happens. This also means that you can *just* build for ServiceWorkers.

This is for the whole domain

Page 76: Offline of web applications

Example: registering

Runs in separate thread just like normal worker. Easy feature detection, no support? no registration, nothing happens. This also means that you can *just* build for ServiceWorkers.

This is for the whole domain

Page 77: Offline of web applications

Example: use cache

It’s like an HTTP proxy all written in client side javascript. It also doesn’t break HTTP, because your code will still do normal AJAX requests etc. If there are no service workers enabled, this code won’t run and we’ll consult the server.

Page 78: Offline of web applications

Example: use cache

It’s like an HTTP proxy all written in client side javascript. It also doesn’t break HTTP, because your code will still do normal AJAX requests etc. If there are no service workers enabled, this code won’t run and we’ll consult the server.

Page 79: Offline of web applications

Example: use cache

It’s like an HTTP proxy all written in client side javascript. It also doesn’t break HTTP, because your code will still do normal AJAX requests etc. If there are no service workers enabled, this code won’t run and we’ll consult the server.

Page 80: Offline of web applications

Spec & playing aroundhttps://github.com/slightlyoff/ServiceWorker

It's testable, there is a polyfill available, but it's really for experimenting only.

Page 81: Offline of web applications

OMGAWESOMEWant to see Firefox OS?

OMG AWESOME SHIT. Now you know how to make offline web apps. I know that there will be a bunch of ppl that want to know more about FFOS. Meet me afterwards. I also have devices with me.

Now ONE MORE THING... This is too good not to show. A commercial from Movistar about Firefox OS to get you excited about that.

Page 82: Offline of web applications
Page 83: Offline of web applications
Page 84: Offline of web applications

Thank you!

slideshare.net/janjongboomThank you!

Page 85: Offline of web applications

slideshare.net/janjongboom

Questions?

Thank you!