Offline-Strategien für HTML5 Web Applikationen - wmka

33

Transcript of Offline-Strategien für HTML5 Web Applikationen - wmka

Page 1: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 2: Offline-Strategien für HTML5 Web Applikationen - wmka

Offline Strategien für HTML5 Web Applikationen

Über mich

Stephan Hochdörfer

Head of IT der bitExpert AG, Mannheim

[email protected]

@shochdoerfer

Page 3: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 4: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 5: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 6: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 7: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 8: Offline-Strategien für HTML5 Web Applikationen - wmka

Was bedeutet „offline“?

Offline Strategien für HTML5 Web Applikationen

Application Cache vs. Offline Storage

Page 9: Offline-Strategien für HTML5 Web Applikationen - wmka

App Cache für statische Ressourcen

Offline Strategien für HTML5 Web Applikationen

<!DOCTYPE html><html lang="en">

HTML Page:

Page 10: Offline-Strategien für HTML5 Web Applikationen - wmka

CACHE MANIFEST

js/app.jscss/app.cssfavicon.icohttp://someotherdomain.com/image.png

<!DOCTYPE html><html lang="en" manifest="cache.manifest">

App Cache für statische Ressourcen

Offline Strategien für HTML5 Web Applikationen

HTML Page:

cache.manifest (Content-Type: text/cache-manifest):

Page 11: Offline-Strategien für HTML5 Web Applikationen - wmka

App Cache – Was darf sollte gecacht werden?

Offline Strategien für HTML5 Web Applikationen

Ja: Schriften Startbild Applikationsicon Einstiegsseite Fallbackseite

Nein: CSS HTML Javascript

Page 12: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 13: Offline-Strategien für HTML5 Web Applikationen - wmka

Dynamische Daten lokal speichern...

Offline Strategien für HTML5 Web Applikationen

Web Storage, Web SQL Database, IndexedDB, File API

Page 14: Offline-Strategien für HTML5 Web Applikationen - wmka

Web Storage: 2 Möglichkeiten

Offline Strategien für HTML5 Web Applikationen

localStorage vs. sessionStorage

Page 15: Offline-Strategien für HTML5 Web Applikationen - wmka

function add(item) {try {

// store object as stringlocalStorage.setItem(item.id, 

             JSON.stringify(item)         );

}catch(ex) {

console.log(ex);}

}

Web Storage: Datensatz hinzufügen

Offline Strategien für HTML5 Web Applikationen

Page 16: Offline-Strategien für HTML5 Web Applikationen - wmka

function remove (id) {try {

localStorage.removeItem(id);}catch(ex) {

console.log(ex);}

}

Web Storage: Datensatz löschen

Offline Strategien für HTML5 Web Applikationen

Page 17: Offline-Strategien für HTML5 Web Applikationen - wmka

Web SQL Database

Offline Strategien für HTML5 Web Applikationen

Eine lokale SQL Datenbank auf SQLite Basis.

Page 18: Offline-Strategien für HTML5 Web Applikationen - wmka

// initalize the database connectionvar db = openDatabase('todo', '1.0', 'Todo Database',    5 * 1024 * 1024 );

db.transaction(function (tx) {tx.executeSql(

'CREATE TABLE IF NOT EXISTS todo '+          '(id INTEGER PRIMARY KEY ASC, todo TEXT)',

[],          onSuccess,          onError

);});

Web SQL Database: Datenbank erzeugen

Offline Strategien für HTML5 Web Applikationen

Page 19: Offline-Strategien für HTML5 Web Applikationen - wmka

function add(item) {db.transaction(function(tx) {

tx.executeSql('INSERT INTO todo (todo) VALUES (?)',[

item.todo],onSuccess,onError

);});

}

Web SQL Database: Datensatz hinzufügen

Offline Strategien für HTML5 Web Applikationen

Page 20: Offline-Strategien für HTML5 Web Applikationen - wmka

function remove(id) {db.transaction(function (tx) {

tx.executeSql('DELETE FROM todo WHERE id = ?',[

id],onSuccess,onError

);});

}

Web SQL Database: Datensatz löschen

Offline Strategien für HTML5 Web Applikationen

Page 21: Offline-Strategien für HTML5 Web Applikationen - wmka

IndexedDB

Offline Strategien für HTML5 Web Applikationen

Kompromiss aus Web Storage und Web SQL Database.

Page 22: Offline-Strategien für HTML5 Web Applikationen - wmka

var db = null;var request = indexedDB.open("todo");request.onfailure = onError;request.onsuccess = function(e) {

db = request.result;var v = "1.0";if(v != db.version) {

var verRequest = db.setVersion(v);verRequest.onfailure = onError;verRequest.onsuccess = function(e) {

var store = db.createObjectStore("todo",{

keyPath: "id",autoIncrement: true

});e.target.transaction.oncomplete = 

                function() {};};

}};

IndexedDB: Objektspeicher erzeugen

Offline Strategien für HTML5 Web Applikationen

Page 23: Offline-Strategien für HTML5 Web Applikationen - wmka

function add(item) {try {

var trans = db.transaction(["todo"],              IDBTransaction.READ_WRITE);

var store   = trans.objectStore("todo");var request = store.put({

"todo": item.todo,});

}catch(ex) {

onError(ex);}

}

IndexedDB: Datensatz hinzufügen

Offline Strategien für HTML5 Web Applikationen

Page 24: Offline-Strategien für HTML5 Web Applikationen - wmka

function remove(id) {try {

var trans = db.transaction(["todo"],             IDBTransaction.READ_WRITE);

var store   = trans.objectStore("todo");var request = store.delete(id);

}catch(ex) {

onError(ex);}

}

IndexedDB: Datensatz löschen

Offline Strategien für HTML5 Web Applikationen

Page 25: Offline-Strategien für HTML5 Web Applikationen - wmka

File API

Offline Strategien für HTML5 Web Applikationen

FileReader API und FileWriter API

Page 26: Offline-Strategien für HTML5 Web Applikationen - wmka

// request quota for persistent storewindow.webkitStorageInfo.requestQuota(

PERSISTENT,size,function(grantedBytes) {

window.requestFileSystem(PERSISTENT,grantedBytes,function(fs) {

// @TODO: access filesystem}

}}

}

File API: Quota anfordern

Offline Strategien für HTML5 Web Applikationen

Page 27: Offline-Strategien für HTML5 Web Applikationen - wmka

Offline Strategien für HTML5 Web Applikationen

Page 28: Offline-Strategien für HTML5 Web Applikationen - wmka

function writeToFile(fs, item) {fs.root.getFile(

'todo.txt',{

create: true},function(fileEntry) {

fileEntry.createWriter(function(fileWriter) {

var bb = new window.BlobBuilder();bb.append(JSON.stringify(item)+

                          "\n");

fileWriter.seek(fileWriter.length);fileWriter.write(

                          bb.getBlob('text/plain'));}, onError

);}, onError

);};

File API: Daten hinzufügen

Offline Strategien für HTML5 Web Applikationen

Page 29: Offline-Strategien für HTML5 Web Applikationen - wmka

Datensynchronisation

Offline Strategien für HTML5 Web Applikationen

PouchDB, the JavaScript Database that Syncs!

Page 30: Offline-Strategien für HTML5 Web Applikationen - wmka
Page 31: Offline-Strategien für HTML5 Web Applikationen - wmka

Browserunterstützung?

Offline Strategien für HTML5 Web Applikationen

App Cache Web Storage WebSQL IndexedDB File API

IE 10.0 8.0 10.0 10.0 -

Firefox 11.0 11.0 11.0 11.0 19.0

Chrome 18.0 18.0 18.0 18.0 18.0

Safari 5.1 5.1 5.1 - -

Opera 12.1 12.1 12.1 - -

iOS Safari 3.2 3.2 3.2 - -

Android 2.1 2.1 2.1 - -

Quelle: http://caniuse.com

Page 32: Offline-Strategien für HTML5 Web Applikationen - wmka

Vielen Dank!

Page 33: Offline-Strategien für HTML5 Web Applikationen - wmka

Verweise

Offline Strategien für HTML5 Web Applikationen

Quellcode: http://github.com/bitExpert/html5-offline

PouchDB: http://pouchdb.com/

Hoodie: http://hood.ie/