le web offline & les apis de contrôle javascript

40
Le Web Offline & les APIs de contrôle Javascript Willy Leloutre - @wleloutre lundi 16 septembre 13

Upload: willy-leloutre

Post on 19-May-2015

555 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Le Web Offline & les APIs de contrôle Javascript

Le Web Offline& les APIs de contrôle Javascript

Willy Leloutre - @wleloutrelundi 16 septembre 13

Page 2: Le Web Offline & les APIs de contrôle Javascript

PréambuleAppCache, LocalStorage, SessionStorage, indexedDb, les APIs HTML5 qui ne déconnectent «jamais» !

Quelles sont les avantages et limites ?

Quels sont les usages actuels et à venir ?

lundi 16 septembre 13

Page 3: Le Web Offline & les APIs de contrôle Javascript

Pourquoi ?

Pour stocker des données dans le navigateur

Pour utiliser vos web apps en mode déconnecté

Pour améliorer l’expérience des utilisateurs nomades

lundi 16 septembre 13

Page 4: Le Web Offline & les APIs de contrôle Javascript

Le Web Storage

lundi 16 septembre 13

Page 5: Le Web Offline & les APIs de contrôle Javascript

Le Web Storage (Dom Storage) c’est...

Session Storage : stockage de session

Local Storage : stockage local « durable »

Nb : La plupart des navigateurs utilisent SqLite pour stocker ces données.

lundi 16 septembre 13

Page 6: Le Web Offline & les APIs de contrôle Javascript

Le Web Storage 2010 - 20** !

lundi 16 septembre 13

Page 7: Le Web Offline & les APIs de contrôle Javascript

Avant HTML5Sur Internet Explorer 5,

il y avait userData. Le Web Storage existait donc

avant HTML5 !

Mais...Internet Explorer avait une longueur d’avance

alors !...

http://diveintohtml5.info/storage.html

lundi 16 septembre 13

Page 8: Le Web Offline & les APIs de contrôle Javascript

Cookies vs WebStorage

Un stockage « durable »

Une API très simple d’utilisation

Une plus grande capacité de stockage (5Mo / domaine) ou plus selon la configuration du navigateur client

De meilleurs performances de chargement (3x à 5x plus rapide qu’un cache natif)

Le Web Storage, est une nouvelle API qui a pour objectif principal de corriger les défaillances rencontrées avec l'utilisation des cookies.

lundi 16 septembre 13

Page 9: Le Web Offline & les APIs de contrôle Javascript

En pratique

localStorage.setItem("name", "will");

var foo = localStorage.getItem("name");console.log(foo);

localStorage.removeItem('name');

localStorage.clear();

lundi 16 septembre 13

Page 10: Le Web Offline & les APIs de contrôle Javascript

Web Storage & Json

var personne = { yeux:"rouge", cheveux: "blond" };

localStorage.setItem("mapersonne",JSON.stringify(personne));

console.log(JSON.parse(localStorage.getItem("ma personne")));

Pour stocker des données plus complexes, il faut les sérialiser avec Json.

Attention, pensez au Polyfill pour Internet Explorer «LT IE8»! http://bestiejs.github.io/json3/

lundi 16 septembre 13

Page 11: Le Web Offline & les APIs de contrôle Javascript

Cas d’utilisation

Twitter, avec le stockage du message en cours de rédaction

Les préférence d'affichage pour une interface d’administration

...

lundi 16 septembre 13

Page 12: Le Web Offline & les APIs de contrôle Javascript

Can I Use Web storage ?

lundi 16 septembre 13

Page 13: Le Web Offline & les APIs de contrôle Javascript

Application Cache

lundi 16 septembre 13

Page 14: Le Web Offline & les APIs de contrôle Javascript

Comment ça fonctionne ?

En exploitant un cache spécifique permettant de stocker des ressources consultables ultérieurement.

En anticipant les actions nécessaires ou non en offline (pages statiques, images, vidéos, ...)

En re-synchronisant votre web app une fois la connection retrouvée

lundi 16 septembre 13

Page 15: Le Web Offline & les APIs de contrôle Javascript

En pratiqueif(navigator.onLine) { alert("Connecté !"); } else { alert("Déconnecté :("); }

Attention sur desktop, nous pouvons être connecté au réseau mais pas au web, auquel cas, navigator.online retourne «true»

lundi 16 septembre 13

Page 16: Le Web Offline & les APIs de contrôle Javascript

Surveiller la connectionfunction goOnline() { alert("Passage en connecté"); } function goOffline() { alert("Passage en déconnecté"); } if(window.addEventListener { window.addEventListener("online",goOnline,false); window.addEventListener("offline",goOffline,false); } else { document.body.ononline = goOnline; document.body.onoffline = goOffline;}

lundi 16 septembre 13

Page 17: Le Web Offline & les APIs de contrôle Javascript

Le manifestLe manifeste est un simple fichier listant les autres ressources nécessaires à la bonne exécution de l'application web en mode déconnecté.

CACHE MANIFEST

# Version 2012-1

index.htmlinfo.html

js/script.jscss/styles.cssimg/image.jpg

http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js

lundi 16 septembre 13

Page 18: Le Web Offline & les APIs de contrôle Javascript

Declarer le Manifest

Dans le DOM :<!doctype html><html lang="fr" manifest="offline.appcache">

Dans le fichier .htaccess :AddType text/cache-manifest .appcache

lundi 16 septembre 13

Page 19: Le Web Offline & les APIs de contrôle Javascript

Cache, Network ou Fallback ?

CACHE : (par défaut) les fichiers mis en cache explicitement

NETWORK : fichiers nécessitant à l'utilisateur d'être connecté, qui court-circuitent le cache quoi qu'il arrive

FALLBACK : ressources de repli en offline pour remplacer des ressources online qui ne peuvent être cachées

lundi 16 septembre 13

Page 20: Le Web Offline & les APIs de contrôle Javascript

Rafraîchir le cache

L'utilisateur efface volontairement le cache

Le fichier du manifeste change

Le cache est modifié par JavaScript

Attention, le navigateur n'ira chercher des nouveaux contenus que dans 3 situations :

lundi 16 septembre 13

Page 21: Le Web Offline & les APIs de contrôle Javascript

Les statuts

UNCACHED pas de cache associé

IDLE sans activité, le cache n’est pas marqué comme obsolète

CHECKING en cours de vérification

DOWNLOADING en phase de téléchargement

UPDATEREADY mise à jour prête

OBSOLETE cache marqué comme obsolète

window.applicationCache.status

lundi 16 septembre 13

Page 22: Le Web Offline & les APIs de contrôle Javascript

Les événementsonchecking vérification en cours (premier déclenché)

onupdate le manifeste n'a pas bougé

ondownloading téléchargement du manifeste

onprogress téléchargement des fichiers

onupdateready mise à jour prête

oncached cache opérationnel

onobsolete cache obsolète effacé

onerror erreur quelconque

lundi 16 septembre 13

Page 23: Le Web Offline & les APIs de contrôle Javascript

Les méthodes

update() déclenche le processus de vérification et de mise à jour du cache

swapCache() passe au cache plus récent s'il est prêt

abort() arrêt des opérations

lundi 16 septembre 13

Page 24: Le Web Offline & les APIs de contrôle Javascript

Exemple http://developers.whatwg.org/

lundi 16 septembre 13

Page 25: Le Web Offline & les APIs de contrôle Javascript

Exemple : Gmail mobile

http://googlecode.blogspot.fr/2009/04/gmail-for-mobile-html5-series-using.html

En 2009, Gmail pour mobile développé en HTML5 dispose de l’API AppCache pour

fonctionner en offline.

lundi 16 septembre 13

Page 26: Le Web Offline & les APIs de contrôle Javascript

Attention !

Sur desktop, nous pouvons être connecté au réseau mais pas au web, auquel cas, navigator.online() retourne « true ».

Les tests nécessitent un serveur web (local). Sur http://127.0.0.1 ça ne fonctionnera pas ! Il faut travailler sur un domaine (ou localhost).

Le cache du Manifest est à part du cache navigateur, mais le manifest lui même peut-être mis en cache dans le cache "principal" du navigateur web !

lundi 16 septembre 13

Page 27: Le Web Offline & les APIs de contrôle Javascript

Précaution supplémentaire

La solution est peut-être de modifier le fichier « .htaccess » pour le faire expirer à la consultation du manifeste.

<IfModule mod_expires.c>ExpiresActive on ExpiresByType text/cache-manifest "access" </IfModule>

lundi 16 septembre 13

Page 28: Le Web Offline & les APIs de contrôle Javascript

Can I Use AppCache ?

lundi 16 septembre 13

Page 29: Le Web Offline & les APIs de contrôle Javascript

WebSQL

lundi 16 septembre 13

Page 30: Le Web Offline & les APIs de contrôle Javascript

WebSql

Les specification ne sont plus maintenues

Le concept est rebasculé sur IndexedDB

Ce n'est pas vraiment du SQL mais plutôt un catalogue d'objet, complexe à mettre en place, et mal supporté…

WebSQL est supporté pour les apps mobile hybrides

lundi 16 septembre 13

Page 31: Le Web Offline & les APIs de contrôle Javascript

Can I Use WebSql ?

lundi 16 septembre 13

Page 32: Le Web Offline & les APIs de contrôle Javascript

IndexedDb

lundi 16 septembre 13

Page 33: Le Web Offline & les APIs de contrôle Javascript

IndexedDbA mi-chemin entre Web Storage et Web SQL, IndexedDb propose un mappage simple, mais offre en plus une compatibilité avec les index du même type que ceux utilisés par les bases de données relationnelles.

Par conséquent, la recherche d'objets correspondant à un champ particulier est rapide, puisque vous n'avez pas à itérer manuellement chaque objet.

https://developer.mozilla.org/fr/docs/IndexedDB/Using_IndexedDB

lundi 16 septembre 13

Page 34: Le Web Offline & les APIs de contrôle Javascript

IndexedDb chez le W3C

lundi 16 septembre 13

Page 35: Le Web Offline & les APIs de contrôle Javascript

Exemple

lundi 16 septembre 13

Page 36: Le Web Offline & les APIs de contrôle Javascript

Can I Use IndexedDb ?

lundi 16 septembre 13

Page 37: Le Web Offline & les APIs de contrôle Javascript

Conclusion

lundi 16 septembre 13

Page 38: Le Web Offline & les APIs de contrôle Javascript

Web Storage, AppCache sont dès à présent utilisables et leur potentiel dépend de votre

créativité !

lundi 16 septembre 13

Page 40: Le Web Offline & les APIs de contrôle Javascript

MERCI !

Willy Leloutre - @wleloutreDirecteur Technique - La Mygale à Chaussette

Digital agency

lundi 16 septembre 13