SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Création d’une application
gérant l’offline et le stockage
client
David CATUHE - @deltakosh
Microsoft – davca@microsoft.com
http://blogs.msdn.com/eternalcoding
David ROUSSET - @davrous
Microsoft – davrous@microsoft.com
http://blogs.msdn.com/davrous
Du web de présentation
 vers le web applicatif
Quelques fonctionnalités clés


   Accélération matérielle        Audio/Vidéo

   CSS3 grid, flexible box        ECMAScript 5

   Multi-columns                  Geolocation

   Stockage client                Websockets

   Drag’n’drop                    Webworkers

   Accès au système de fichiers   Hit testing / touch / gestures

   Mode offline                   Canvas, SVG, animations

   Blobs                          …
Démonstration
Présentation de l’application SnapX
Support du mode
  hors connexion
Mode offline
  Version du site téléchargée lorsque le site est en ligne
  Prérequis : Liste des ressources (HTML, CSS, JS, Images,
  etc.)
  Le navigateur détecte la connectivité et
    Si en ligne :

         Télécharge les ressources

         Les garde synchronisées

    Si hors ligne :

         Indique dans le DOM le statut

         Lève un événement si le statut change

  Le navigateur ne fait pas :
    La sauvegarde de vos données

    La synchronisation lors de la reconnexion



  http://www.w3.org/TR/offline-webapps/
Mode offline
  Mise en œuvre :
   Cache Manifest File  Liste des ressources

             <!DOCTYPE HTML>
             <html manifest="/cache.manifest">
                    <body> ... </body>
             </html
      Chaque page doit pointer vers le fichier de manifeste
             CACHE MANIFEST
             /default.htm
             /default.css
             /default.js
             /logo.jpg
             # commentaires…..
      Attention au cache! Il faut modifier le contenu pour
       forcer le rafraichissement (si vous modifiez les fichiers
       cibles, cela ne suffit pas!)
Mode offline – mode avancé

  Gestion des entêtes :
             CACHE MANIFEST
             NETWORK:
             /connect.asmx
             CACHE:
             /default.htm
             /default.css
             /default.js
             /logo.jpg

      NETWORK : Liste des fichiers uniquement disponible
       en mode connecté
      CACHE : Liste des fichiers à rendre disponible hors
       ligne
Mode offline – Mode de repli

  Mise en œuvre du mode de repli
   Fichiers de remplacement en cas d’erreurs:

             CACHE MANIFEST
             FALLBACK:
             / /offline.htm
             NETWORK:
             /connect.asmx
             CACHE:
             /default.htm
             /default.css
             /default.js
             /logo.jpg

      « / » : Chaque page
Mode offline – Ressources externes

  Gestion des entêtes :
             CACHE MANIFEST
             FALLBACK:
             / /offline.html
             NETWORK:
             *

      « * » : Toutes les ressources qui ne sont pas dans
       FALLBACK et CACHE
Mode offline – Cycle de vie
                          Manifest présent ?


                              [checking]


                              Déjà vu ?


                    Oui                    Non


                                      [downloading]
                 A changé ?
                                        [progress]


       Non                                            [cached]
    [noupdate]
                   [downloading] & [updateready]
Mode offline - Status

  Window.applicationCache.status
   UNCACHED

   IDLE

   CHECKING

   DOWNLOADING

   UPDATEREADY

   OBSOLTE

  Window.applicationCache.update()
  Window.applicationCache.abort()
  Window.applicationCache.swapCache()
Mode offline - Support

  http://www.caniuse.com
Démonstration
Fonctionnement hors ligne de SnapX
File API
File API

  Lecture et     Création et     Répertoire et
 manipulation     écriture        hiérarchie

     File/blob                    DirectoryReader
                   BlobBuilder

                                     FileEntry/
      FileList
                                   DirectoryEntry

                   FileWriter
    FileReader                     LocalFileSystem
Démonstration
Demo File API
Stockage
client
Stockage client – DOM Storage

  Stockage par paire clé/valeur et les propriétés
  sont stockées uniquement sous forme de chaîne

  Chaque domaine dispose d’une zone de
  stockage isolée de 10 Mo

  2 types :
      localStorage : partagé par toute l’application et
       persistant
      sessionStorage : durée de vie par session -> pratique
       pour les problématiques multi-onglets

  Scénarios d’usage : sauvegarde d’un formulaire
  de saisie, mise en place de cache, etc.
Comprendre par le code
<script>
var lStorage = window.localStorage;
function init() {
   if (!lStorage.score)
       lStorage.score = 0;
   document.getElementById('c1').innerText = lStorage.score;
}
function save() {
   lStorage.score = getGameScore();}
</script>
<body onload=“init();”>
   <p>Votre dernier score était:
      <span id="c1">non défini</span>
   </p>
</body>
Démonstration
Démo DOM Storage – avec YODA
Stockage client - IndexedDB

  De type NoSQL : paires de clé-valeur

  Les valeurs sont stockées sous forme d’objets JS
      Une indexation permet un filtrage et une recherche
       efficace


  Tout est asynchrone et tout est transaction

  Les opérations classiques en SQL comme la
  jointure se font manuellement par code
Comprendre via le code


var oRequestDB = window.indexedDB.open(“Library”);
oRequestDB.onsuccess = function (event) {
    db1 = oRequestDB.result;
    if (db1.version == 1) {
       txn = db1.transaction([“Books”],IDBTransaction.READ_ONLY);
       var objStoreReq = txn.objectStore(“Books”);
       var request = objStoreReq.get("Book0");
       request.onsuccess = processGet;
    }
};
IndexedDB - Support

  http://www.caniuse.com
Idées de scénarios
                              Canvas ou
                                autre
                               élément
                                HTML
                      File
                     Object
                     (Blob)



                                Web




                      File
                     Object      Indexed
                     (Blob)        DB
Démonstration
Une belle démo moche d’IndexedDB ! 
Démo de l’outil de debug iDB
Gestion d’IndexedDB dans SnapX avec driver BackBone.js
Drag’n’Drop
Drag’n’Drop

  Gestion du glisser/déposer interne et externe
  Recette de cuisine :
    Marquer les objets [draggable]

    S’abonner aux événements (ondragstart, ondragend)

    Définition de la dropzone

       Via l’attribut [dropzone]

       Via les événements (ondragenter, ondragover)

    S’abonner à l’événement ondrop

    Récupération de l’objet DataTransfer
Drag’n’Drop – les événements
de départ


<ol ondragstart="dragStartHandler(event)" ondragend="dragEndHandler(event)" >
        <li draggable="true" data-value="World of Warcraft">Wow</li>
        <li draggable="true" data-value="Elder Scroll 5">Skyrim</li>
        <li draggable="true" data-value="Angry birds">Angry Birds</li>
</ol>
Drag’n’Drop – les événements
de réception


  <div ondrop="dropHandler(event)" ondragenter="dragEnterHandler(event)"
          ondragover="dragOverHandler(event)">
 </div>
Drag’n’Drop – DropZone

 <div dropzone="move   string:text/monformat" ondrop="dropHandler(event)">
 </div>




 Mode de drop:             Moniker:                   Type mime
 • Move                    • File
 • Link                    • String
 • Copy
Drag’n’Drop - DataTransfer

  Interface utilisée pour stocker les données à transférer
    dropEffect : none, copy, link, move

    effectAllowed : none", "copy", "copyLink", "copyMove",

      "link", "linkMove", "move", "all", "uninitialized“
    items

    setDragImage

    addElement

    types

    getData / setData

    clearData

    files
Drag’n’Drop - Lancement
 <script>
  var internalDNDType = 'text/monformat';
   function dragStartHandler(event) {
     if (event.target instanceof HTMLLIElement) {
       event.dataTransfer.setData(internalDNDType,
          event.target.dataset.value);
       event.dataTransfer.effectAllowed = 'move
    } else {
      event.preventDefault();
    }
   }
 </script>
Drag’n’Drop - Réception

 <script>
  var internalDNDType = 'text/monformat';
  function dropHandler(event) {
    var li = document.createElement('li');
    var data = event.dataTransfer.getData(internalDNDType);
    if (data == 'World of Warcraft') {
      li.textContent = 'Yeahhh';
    } else {
      li.textContent = 'Game over';
    }
    event.target.appendChild(li);
  }
 </script>
Démonstration
Gestion du drag’n’drop de SnapX
<Questions/>
palais des
congrès
Paris




7, 8 et 9
février 2012

Weitere ähnliche Inhalte

Was ist angesagt?

Ajax et Accessibilite
Ajax et AccessibiliteAjax et Accessibilite
Ajax et Accessibilitemikeh
 
Cours javascript
Cours javascriptCours javascript
Cours javascriptkrymo
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutantStanislas Chollet
 
Jquery - introduction au langage
Jquery - introduction au langageJquery - introduction au langage
Jquery - introduction au langageStrasWeb
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Alexandre Marie
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Tugdual Grall
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascriptcodedarmor
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptxEsokia
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications WebNicolas Hoffmann
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 

Was ist angesagt? (20)

Ajax et Accessibilite
Ajax et AccessibiliteAjax et Accessibilite
Ajax et Accessibilite
 
Introduction a jQuery
Introduction a jQueryIntroduction a jQuery
Introduction a jQuery
 
Cours javascript
Cours javascriptCours javascript
Cours javascript
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutant
 
Jquery - introduction au langage
Jquery - introduction au langageJquery - introduction au langage
Jquery - introduction au langage
 
Jquery : les bases
Jquery : les basesJquery : les bases
Jquery : les bases
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptx
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications Web
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
SAPIENS2009 - Module 4B
SAPIENS2009 - Module 4BSAPIENS2009 - Module 4B
SAPIENS2009 - Module 4B
 
Introduction à HTML 5
Introduction à HTML 5Introduction à HTML 5
Introduction à HTML 5
 

Andere mochten auch

HTML5 Offline Web Applications (Silicon Valley User Group)
HTML5 Offline Web Applications (Silicon Valley User Group)HTML5 Offline Web Applications (Silicon Valley User Group)
HTML5 Offline Web Applications (Silicon Valley User Group)robinzimmermann
 
Html5 Offline Applications
Html5 Offline Applications Html5 Offline Applications
Html5 Offline Applications Sunny Sharma
 
Le Web Offline & les APIs de contrôle Javascript
Le Web Offline & les APIs de contrôle JavascriptLe Web Offline & les APIs de contrôle Javascript
Le Web Offline & les APIs de contrôle JavascriptWilly Leloutre
 
Saint-Exupéry, pilote de guerre
Saint-Exupéry, pilote de guerreSaint-Exupéry, pilote de guerre
Saint-Exupéry, pilote de guerredjamilaidir
 
Demo Day : présentation BazaarVoice
Demo Day : présentation BazaarVoiceDemo Day : présentation BazaarVoice
Demo Day : présentation BazaarVoiceX-PRIME GROUPE
 
Demo Day : présentation Teleportd
Demo Day : présentation TeleportdDemo Day : présentation Teleportd
Demo Day : présentation TeleportdX-PRIME GROUPE
 
Was muss das zukünftige Marktdesign liefern?
Was muss das zukünftige Marktdesign liefern?Was muss das zukünftige Marktdesign liefern?
Was muss das zukünftige Marktdesign liefern?Oeko-Institut
 
Produktpolitik für stromsparende Produkte
Produktpolitik für stromsparende ProdukteProduktpolitik für stromsparende Produkte
Produktpolitik für stromsparende ProdukteOeko-Institut
 
TXIM : Mise à jour frictionless sharing
TXIM : Mise à jour frictionless sharingTXIM : Mise à jour frictionless sharing
TXIM : Mise à jour frictionless sharingX-PRIME GROUPE
 

Andere mochten auch (20)

Les Trous Guv
Les Trous GuvLes Trous Guv
Les Trous Guv
 
HTML5 Offline Web Applications (Silicon Valley User Group)
HTML5 Offline Web Applications (Silicon Valley User Group)HTML5 Offline Web Applications (Silicon Valley User Group)
HTML5 Offline Web Applications (Silicon Valley User Group)
 
Html5 Offline Applications
Html5 Offline Applications Html5 Offline Applications
Html5 Offline Applications
 
Le Web Offline & les APIs de contrôle Javascript
Le Web Offline & les APIs de contrôle JavascriptLe Web Offline & les APIs de contrôle Javascript
Le Web Offline & les APIs de contrôle Javascript
 
Espero Recibirla
Espero RecibirlaEspero Recibirla
Espero Recibirla
 
Ewita Final Version
Ewita Final VersionEwita Final Version
Ewita Final Version
 
Planet
PlanetPlanet
Planet
 
Pelissou
PelissouPelissou
Pelissou
 
Saint-Exupéry, pilote de guerre
Saint-Exupéry, pilote de guerreSaint-Exupéry, pilote de guerre
Saint-Exupéry, pilote de guerre
 
Fenomenologia... melbis
Fenomenologia... melbisFenomenologia... melbis
Fenomenologia... melbis
 
Ruby on Rails SS09 04
Ruby on Rails SS09 04Ruby on Rails SS09 04
Ruby on Rails SS09 04
 
Demo Day : présentation BazaarVoice
Demo Day : présentation BazaarVoiceDemo Day : présentation BazaarVoice
Demo Day : présentation BazaarVoice
 
Demo Day : présentation Teleportd
Demo Day : présentation TeleportdDemo Day : présentation Teleportd
Demo Day : présentation Teleportd
 
Retinoblastoma
RetinoblastomaRetinoblastoma
Retinoblastoma
 
Was muss das zukünftige Marktdesign liefern?
Was muss das zukünftige Marktdesign liefern?Was muss das zukünftige Marktdesign liefern?
Was muss das zukünftige Marktdesign liefern?
 
Produktpolitik für stromsparende Produkte
Produktpolitik für stromsparende ProdukteProduktpolitik für stromsparende Produkte
Produktpolitik für stromsparende Produkte
 
TXIM : Mise à jour frictionless sharing
TXIM : Mise à jour frictionless sharingTXIM : Mise à jour frictionless sharing
TXIM : Mise à jour frictionless sharing
 
death note
death notedeath note
death note
 
Web 2 0 Chancen Und Herausforderungen FüR Den Unterricht
Web 2 0   Chancen Und Herausforderungen FüR Den UnterrichtWeb 2 0   Chancen Und Herausforderungen FüR Den Unterricht
Web 2 0 Chancen Und Herausforderungen FüR Den Unterricht
 
grouposcope
grouposcopegrouposcope
grouposcope
 

Ähnlich wie Création d’une application gérant l’offline et le stockage

La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflineDNG Consulting
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Framework Hibernate
Framework HibernateFramework Hibernate
Framework HibernateInes Ouaz
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
HTML5 vu par Ekino
HTML5 vu par EkinoHTML5 vu par Ekino
HTML5 vu par Ekinoekino
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapideBilal Baltagi
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
 
Nouveautés html5 et css3 dans internet explorer 10
Nouveautés html5 et css3 dans internet explorer 10Nouveautés html5 et css3 dans internet explorer 10
Nouveautés html5 et css3 dans internet explorer 10davrous
 
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites WebHTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites WebMicrosoft
 
Présentation complète de l'HTML5
Présentation complète de l'HTML5Présentation complète de l'HTML5
Présentation complète de l'HTML5jverrecchia
 
Drupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupalDrupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupalArtusamak
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
Accélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces webAccélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces webGrégoire Larreur de Farcy
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 

Ähnlich wie Création d’une application gérant l’offline et le stockage (20)

La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Framework Hibernate
Framework HibernateFramework Hibernate
Framework Hibernate
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
HTML5 vu par Ekino
HTML5 vu par EkinoHTML5 vu par Ekino
HTML5 vu par Ekino
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
 
Nouveaux apis
Nouveaux apisNouveaux apis
Nouveaux apis
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Nouveautés html5 et css3 dans internet explorer 10
Nouveautés html5 et css3 dans internet explorer 10Nouveautés html5 et css3 dans internet explorer 10
Nouveautés html5 et css3 dans internet explorer 10
 
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites WebHTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
 
Présentation complète de l'HTML5
Présentation complète de l'HTML5Présentation complète de l'HTML5
Présentation complète de l'HTML5
 
Drupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupalDrupalcamp Nantes - Optimisations drupal
Drupalcamp Nantes - Optimisations drupal
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Accélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces webAccélérez le développement de vos interfaces web
Accélérez le développement de vos interfaces web
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 

Mehr von davrous

Building a cross platforms tower defense game Dev Days 2016
Building a cross platforms tower defense game Dev Days 2016Building a cross platforms tower defense game Dev Days 2016
Building a cross platforms tower defense game Dev Days 2016davrous
 
Create fun & immersive audio experiences with web audio
Create fun & immersive audio experiences with web audioCreate fun & immersive audio experiences with web audio
Create fun & immersive audio experiences with web audiodavrous
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Unleashing WebGL & WebAudio with babylon.js
Unleashing WebGL & WebAudio with babylon.jsUnleashing WebGL & WebAudio with babylon.js
Unleashing WebGL & WebAudio with babylon.jsdavrous
 
Creating 3D Worlds with WebGL and Babylon.js - Codemotion.es
Creating 3D Worlds with WebGL and Babylon.js - Codemotion.esCreating 3D Worlds with WebGL and Babylon.js - Codemotion.es
Creating 3D Worlds with WebGL and Babylon.js - Codemotion.esdavrous
 
Introduction à TypeScript et retour d'expérience sur le portage de Babylon.JS
Introduction à TypeScript et retour d'expérience sur le portage de Babylon.JSIntroduction à TypeScript et retour d'expérience sur le portage de Babylon.JS
Introduction à TypeScript et retour d'expérience sur le portage de Babylon.JSdavrous
 
Babylon.js WebGL Paris
Babylon.js  WebGL ParisBabylon.js  WebGL Paris
Babylon.js WebGL Parisdavrous
 
Microsoft et l'Open Source
Microsoft et l'Open SourceMicrosoft et l'Open Source
Microsoft et l'Open Sourcedavrous
 
Back from BUILD - WebGL
Back from BUILD -  WebGLBack from BUILD -  WebGL
Back from BUILD - WebGLdavrous
 
NGF2014 - Create a 3d game with webgl and babylon.js
NGF2014 - Create a 3d game with webgl and babylon.jsNGF2014 - Create a 3d game with webgl and babylon.js
NGF2014 - Create a 3d game with webgl and babylon.jsdavrous
 
Réaliser un jeu cross plateformes avec WebGL et babylon.js
Réaliser un jeu cross plateformes avec WebGL et babylon.jsRéaliser un jeu cross plateformes avec WebGL et babylon.js
Réaliser un jeu cross plateformes avec WebGL et babylon.jsdavrous
 
Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5davrous
 
Pointer events
Pointer eventsPointer events
Pointer eventsdavrous
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8davrous
 
Introduction au développement windows 8 modern ui avec html5 et javascript
Introduction au développement windows 8 modern ui avec html5 et javascriptIntroduction au développement windows 8 modern ui avec html5 et javascript
Introduction au développement windows 8 modern ui avec html5 et javascriptdavrous
 
Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !davrous
 
W3 cafe ie10etwindows8
W3 cafe ie10etwindows8W3 cafe ie10etwindows8
W3 cafe ie10etwindows8davrous
 
Création d'une application html5 utilisant canvas, svg et les animations css3
Création d'une application html5 utilisant canvas, svg et les animations css3Création d'une application html5 utilisant canvas, svg et les animations css3
Création d'une application html5 utilisant canvas, svg et les animations css3davrous
 
Webinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft IntelWebinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft Inteldavrous
 
Développement d'un jeu de plateforme en html5
Développement d'un jeu de plateforme en html5Développement d'un jeu de plateforme en html5
Développement d'un jeu de plateforme en html5davrous
 

Mehr von davrous (20)

Building a cross platforms tower defense game Dev Days 2016
Building a cross platforms tower defense game Dev Days 2016Building a cross platforms tower defense game Dev Days 2016
Building a cross platforms tower defense game Dev Days 2016
 
Create fun & immersive audio experiences with web audio
Create fun & immersive audio experiences with web audioCreate fun & immersive audio experiences with web audio
Create fun & immersive audio experiences with web audio
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Unleashing WebGL & WebAudio with babylon.js
Unleashing WebGL & WebAudio with babylon.jsUnleashing WebGL & WebAudio with babylon.js
Unleashing WebGL & WebAudio with babylon.js
 
Creating 3D Worlds with WebGL and Babylon.js - Codemotion.es
Creating 3D Worlds with WebGL and Babylon.js - Codemotion.esCreating 3D Worlds with WebGL and Babylon.js - Codemotion.es
Creating 3D Worlds with WebGL and Babylon.js - Codemotion.es
 
Introduction à TypeScript et retour d'expérience sur le portage de Babylon.JS
Introduction à TypeScript et retour d'expérience sur le portage de Babylon.JSIntroduction à TypeScript et retour d'expérience sur le portage de Babylon.JS
Introduction à TypeScript et retour d'expérience sur le portage de Babylon.JS
 
Babylon.js WebGL Paris
Babylon.js  WebGL ParisBabylon.js  WebGL Paris
Babylon.js WebGL Paris
 
Microsoft et l'Open Source
Microsoft et l'Open SourceMicrosoft et l'Open Source
Microsoft et l'Open Source
 
Back from BUILD - WebGL
Back from BUILD -  WebGLBack from BUILD -  WebGL
Back from BUILD - WebGL
 
NGF2014 - Create a 3d game with webgl and babylon.js
NGF2014 - Create a 3d game with webgl and babylon.jsNGF2014 - Create a 3d game with webgl and babylon.js
NGF2014 - Create a 3d game with webgl and babylon.js
 
Réaliser un jeu cross plateformes avec WebGL et babylon.js
Réaliser un jeu cross plateformes avec WebGL et babylon.jsRéaliser un jeu cross plateformes avec WebGL et babylon.js
Réaliser un jeu cross plateformes avec WebGL et babylon.js
 
Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5
 
Pointer events
Pointer eventsPointer events
Pointer events
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8
 
Introduction au développement windows 8 modern ui avec html5 et javascript
Introduction au développement windows 8 modern ui avec html5 et javascriptIntroduction au développement windows 8 modern ui avec html5 et javascript
Introduction au développement windows 8 modern ui avec html5 et javascript
 
Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !
 
W3 cafe ie10etwindows8
W3 cafe ie10etwindows8W3 cafe ie10etwindows8
W3 cafe ie10etwindows8
 
Création d'une application html5 utilisant canvas, svg et les animations css3
Création d'une application html5 utilisant canvas, svg et les animations css3Création d'une application html5 utilisant canvas, svg et les animations css3
Création d'une application html5 utilisant canvas, svg et les animations css3
 
Webinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft IntelWebinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft Intel
 
Développement d'un jeu de plateforme en html5
Développement d'un jeu de plateforme en html5Développement d'un jeu de plateforme en html5
Développement d'un jeu de plateforme en html5
 

Création d’une application gérant l’offline et le stockage

  • 1. Création d’une application gérant l’offline et le stockage client David CATUHE - @deltakosh Microsoft – davca@microsoft.com http://blogs.msdn.com/eternalcoding David ROUSSET - @davrous Microsoft – davrous@microsoft.com http://blogs.msdn.com/davrous
  • 2. Du web de présentation vers le web applicatif
  • 3. Quelques fonctionnalités clés Accélération matérielle Audio/Vidéo CSS3 grid, flexible box ECMAScript 5 Multi-columns Geolocation Stockage client Websockets Drag’n’drop Webworkers Accès au système de fichiers Hit testing / touch / gestures Mode offline Canvas, SVG, animations Blobs …
  • 5. Support du mode hors connexion
  • 6. Mode offline Version du site téléchargée lorsque le site est en ligne Prérequis : Liste des ressources (HTML, CSS, JS, Images, etc.) Le navigateur détecte la connectivité et  Si en ligne :  Télécharge les ressources  Les garde synchronisées  Si hors ligne :  Indique dans le DOM le statut  Lève un événement si le statut change Le navigateur ne fait pas :  La sauvegarde de vos données  La synchronisation lors de la reconnexion http://www.w3.org/TR/offline-webapps/
  • 7. Mode offline Mise en œuvre :  Cache Manifest File  Liste des ressources <!DOCTYPE HTML> <html manifest="/cache.manifest"> <body> ... </body> </html  Chaque page doit pointer vers le fichier de manifeste CACHE MANIFEST /default.htm /default.css /default.js /logo.jpg # commentaires…..  Attention au cache! Il faut modifier le contenu pour forcer le rafraichissement (si vous modifiez les fichiers cibles, cela ne suffit pas!)
  • 8. Mode offline – mode avancé Gestion des entêtes : CACHE MANIFEST NETWORK: /connect.asmx CACHE: /default.htm /default.css /default.js /logo.jpg  NETWORK : Liste des fichiers uniquement disponible en mode connecté  CACHE : Liste des fichiers à rendre disponible hors ligne
  • 9. Mode offline – Mode de repli Mise en œuvre du mode de repli  Fichiers de remplacement en cas d’erreurs: CACHE MANIFEST FALLBACK: / /offline.htm NETWORK: /connect.asmx CACHE: /default.htm /default.css /default.js /logo.jpg  « / » : Chaque page
  • 10. Mode offline – Ressources externes Gestion des entêtes : CACHE MANIFEST FALLBACK: / /offline.html NETWORK: *  « * » : Toutes les ressources qui ne sont pas dans FALLBACK et CACHE
  • 11. Mode offline – Cycle de vie Manifest présent ? [checking] Déjà vu ? Oui Non [downloading] A changé ? [progress] Non [cached] [noupdate] [downloading] & [updateready]
  • 12. Mode offline - Status Window.applicationCache.status  UNCACHED  IDLE  CHECKING  DOWNLOADING  UPDATEREADY  OBSOLTE Window.applicationCache.update() Window.applicationCache.abort() Window.applicationCache.swapCache()
  • 13. Mode offline - Support http://www.caniuse.com
  • 16. File API Lecture et Création et Répertoire et manipulation écriture hiérarchie File/blob DirectoryReader BlobBuilder FileEntry/ FileList DirectoryEntry FileWriter FileReader LocalFileSystem
  • 19. Stockage client – DOM Storage Stockage par paire clé/valeur et les propriétés sont stockées uniquement sous forme de chaîne Chaque domaine dispose d’une zone de stockage isolée de 10 Mo 2 types :  localStorage : partagé par toute l’application et persistant  sessionStorage : durée de vie par session -> pratique pour les problématiques multi-onglets Scénarios d’usage : sauvegarde d’un formulaire de saisie, mise en place de cache, etc.
  • 20. Comprendre par le code <script> var lStorage = window.localStorage; function init() { if (!lStorage.score) lStorage.score = 0; document.getElementById('c1').innerText = lStorage.score; } function save() { lStorage.score = getGameScore();} </script> <body onload=“init();”> <p>Votre dernier score était: <span id="c1">non défini</span> </p> </body>
  • 22. Stockage client - IndexedDB De type NoSQL : paires de clé-valeur Les valeurs sont stockées sous forme d’objets JS  Une indexation permet un filtrage et une recherche efficace Tout est asynchrone et tout est transaction Les opérations classiques en SQL comme la jointure se font manuellement par code
  • 23. Comprendre via le code var oRequestDB = window.indexedDB.open(“Library”); oRequestDB.onsuccess = function (event) { db1 = oRequestDB.result; if (db1.version == 1) { txn = db1.transaction([“Books”],IDBTransaction.READ_ONLY); var objStoreReq = txn.objectStore(“Books”); var request = objStoreReq.get("Book0"); request.onsuccess = processGet; } };
  • 24. IndexedDB - Support http://www.caniuse.com
  • 25. Idées de scénarios Canvas ou autre élément HTML File Object (Blob) Web File Object Indexed (Blob) DB
  • 26. Démonstration Une belle démo moche d’IndexedDB !  Démo de l’outil de debug iDB Gestion d’IndexedDB dans SnapX avec driver BackBone.js
  • 28. Drag’n’Drop Gestion du glisser/déposer interne et externe Recette de cuisine :  Marquer les objets [draggable]  S’abonner aux événements (ondragstart, ondragend)  Définition de la dropzone  Via l’attribut [dropzone]  Via les événements (ondragenter, ondragover)  S’abonner à l’événement ondrop  Récupération de l’objet DataTransfer
  • 29. Drag’n’Drop – les événements de départ <ol ondragstart="dragStartHandler(event)" ondragend="dragEndHandler(event)" > <li draggable="true" data-value="World of Warcraft">Wow</li> <li draggable="true" data-value="Elder Scroll 5">Skyrim</li> <li draggable="true" data-value="Angry birds">Angry Birds</li> </ol>
  • 30. Drag’n’Drop – les événements de réception <div ondrop="dropHandler(event)" ondragenter="dragEnterHandler(event)" ondragover="dragOverHandler(event)"> </div>
  • 31. Drag’n’Drop – DropZone <div dropzone="move string:text/monformat" ondrop="dropHandler(event)"> </div> Mode de drop: Moniker: Type mime • Move • File • Link • String • Copy
  • 32. Drag’n’Drop - DataTransfer Interface utilisée pour stocker les données à transférer  dropEffect : none, copy, link, move  effectAllowed : none", "copy", "copyLink", "copyMove", "link", "linkMove", "move", "all", "uninitialized“  items  setDragImage  addElement  types  getData / setData  clearData  files
  • 33. Drag’n’Drop - Lancement <script> var internalDNDType = 'text/monformat'; function dragStartHandler(event) { if (event.target instanceof HTMLLIElement) { event.dataTransfer.setData(internalDNDType, event.target.dataset.value); event.dataTransfer.effectAllowed = 'move } else { event.preventDefault(); } } </script>
  • 34. Drag’n’Drop - Réception <script> var internalDNDType = 'text/monformat'; function dropHandler(event) { var li = document.createElement('li'); var data = event.dataTransfer.getData(internalDNDType); if (data == 'World of Warcraft') { li.textContent = 'Yeahhh'; } else { li.textContent = 'Game over'; } event.target.appendChild(li); } </script>
  • 37. palais des congrès Paris 7, 8 et 9 février 2012

Hinweis der Redaktion

  1. Welcome pack Davrous &amp; Davca
  2. Davrous
  3. Davrous
  4. Démo par le légendaire DavCa
  5. T+5minDavCa
  6. DavCA
  7. DavCa
  8. DavCa
  9. DavCa
  10. DavCa
  11. DavCa
  12. DavCa
  13. DavCa
  14. T + 15 minDavRousConsole IIS  StopManifest dynamique avec console F12 ouverte + message dialog « voulez vous ? »
  15. T + 20Davca
  16. DavCa
  17. DavCaDemo F12 avecDebug sur ImageProcessor.js et fonction getFile()
  18. DavRous
  19. DavRous
  20. T + 30 minDavCa
  21. T + 33 minDavRous
  22. DavRous
  23. DavRous
  24. DavRous
  25. T+38min
  26. T+45 min
  27. DavCa
  28. DavCa
  29. DavCa
  30. DavCa
  31. DavCa
  32. DavCa
  33. DavCa
  34. T + 50 minDavRous