Your browser, your storage (extended version)

56
Your browser, my storage a new approach on data storing (v.1.2) Francesco Fullone ff AT ideato.it

description

Complex applications need a persistent database to store, search and join data: till now a dedicated server was needed to do this, and no offline usage of the app was possible. With the introduction of HTML5 and the concept of Web Databases, we don’t need an external server anymore: everything is stored within the user browser and thus the web app can be used offline as well as online.

Transcript of Your browser, your storage (extended version)

Page 1: Your browser, your storage (extended version)

Your browser, my storagea new approach on data storing (v.1.2)

Francesco Fullone

ff AT ideato.it

Page 2: Your browser, your storage (extended version)

Who am I

Francesco Fullone aka Fullo

- PHP developer since 1999

- President

- and Open Source Evangelist

- CEO @

- founder @

- Nerd and geek

Page 3: Your browser, your storage (extended version)

What we want is a lot of storage space, on the client, that persists beyond a page refresh and isn’t transmitted to the server.

~ M. Pilgrim

Page 4: Your browser, your storage (extended version)

Persistent local storage is one of the areas where client

applications traditionally win against web applications.

Page 5: Your browser, your storage (extended version)

A jump in the past

Page 6: Your browser, your storage (extended version)

Cookies were introduced in HTTP/1.0, limited to only 20 per

domain and 4KB each.

http://qrurl.it/r/3l

Page 7: Your browser, your storage (extended version)

Cookies are sent to and from client at any connection.

http://qrurl.it/r/3m

Page 8: Your browser, your storage (extended version)

Microsoft with Internet Explorer 6 introduced dHTML and the

userData API to store up to 64KB of data

Page 9: Your browser, your storage (extended version)

Mozilla introduced with Firefox 2 the DOM Storage API, it will then

know as Web Storage.

Page 10: Your browser, your storage (extended version)

In 2002 Adobe

created the

Flash Cookies aka

“Local Shared Objects” for Flash 6

Data storage increased to 100KB but it

was difficult to be used

Page 11: Your browser, your storage (extended version)

With Flash 8, in 2006, Adobe introduced the

ExternalInterface to allow Js to access

to the stored resources.

Page 12: Your browser, your storage (extended version)

Between 2005 and 2007 dojox.storage was written by Brad Neuberg as a Js->Flash

bridge to manage bigger chunks of data

(with user prompt over 1MB).

Page 13: Your browser, your storage (extended version)

Google created Gears in 2007, that introduced a database

paradigm (based on SQLite) to the storage problem.

Page 14: Your browser, your storage (extended version)

BUT

Page 15: Your browser, your storage (extended version)

All these storage systems had different APIs, a common

platform is needed by all the browser vendors.

Page 16: Your browser, your storage (extended version)
Page 17: Your browser, your storage (extended version)

The two approaches of storing:

Application Cache

Offline storage

Page 18: Your browser, your storage (extended version)

Application Caching involves saving the application's core logic

and user-interface.

http://qrurl.it/r/3g

Page 19: Your browser, your storage (extended version)

It is enabled by a file .appcache that declares which resources

have to be saved locally.

(theoretically limited to 5MB).

Page 20: Your browser, your storage (extended version)

CACHE MANIFEST

# Explicitly cached entries

CACHE:index.htmlstylesheet.cssimages/logo.pnghttp://www.anothersite.com/scripts/main.js

# Resources that require the user to be online.

NETWORK:login.php/myapihttp://api.twitter.com

# static.html will be served if main.php is inaccessible# offline.jpg will be served in place of all images in images/large/

FALLBACK:/main.php /static.htmlimages/large/ images/offline.jpg.avi images/offline.jpg

Page 21: Your browser, your storage (extended version)

applicationCache can use events to trigger application behavior

window.applicationCache.onchecking = function(e) {

log("Checking for application update");

}

Page 22: Your browser, your storage (extended version)

applicationCache or check if the browser is online

If (window.navigator.onLine) {

log("Application is online");

}

Page 23: Your browser, your storage (extended version)

Chrome/Chromium doesn't support

window.navigator.onLine attribute and...

It doesn't have a real offline mode!

Page 24: Your browser, your storage (extended version)

As stated in the specs: “window.navigator.onLine is inherently unreliable. A computer can be connected

to a network without having Internet access.”

Page 25: Your browser, your storage (extended version)

If you change a

resource and you

don't update (rev)

the .appcache file the browser may not

download the new file!(yes! cached resources have priority on the online ones)

Page 26: Your browser, your storage (extended version)

Data storage is about capturing specific

data, or resources the user has expressed

interest in.http://qrurl.it/r/3n

Page 27: Your browser, your storage (extended version)

Approaches to

Data Storage

Page 28: Your browser, your storage (extended version)

Web Storage is the simpler implementation of the Data

Storage paradigm.

http://qrurl.it/r/3h

Page 29: Your browser, your storage (extended version)

Web Storage is based on a structure of key-value pairs like

any JavaScript object.

localStorage.setItem("bar", foo);

Page 30: Your browser, your storage (extended version)

Web Storage can save up to 5MB but only as strings. So we have

to force a casting if needed.

var bar = parseInt(localStorage["bar"]);

Page 31: Your browser, your storage (extended version)

Web Storage should be local based or session based.

var bar = localStorage["bar"];

var foo = sessionStorage["foo"];

Page 32: Your browser, your storage (extended version)

sessionStorage mantains a storage area that's available for the duration of the web session.

Opening a new window/tab will create a new session.

Page 33: Your browser, your storage (extended version)

localStorage relies only on client, so we have to track

changes and use storage.events to sync server and client if

needed.

Page 34: Your browser, your storage (extended version)

Web SQL Database is WAS just an offline SQL implementation,

based on SQLite.

http://qrurl.it/r/3i

Page 35: Your browser, your storage (extended version)

this.db = openDatabase('geomood', '1.0', 'Geo', 8192);

this.db.transaction(function(tx) {

tx.executeSql("create table if not exists checkins(id integer primary key asc, time integer, latitude float, longitude float, mood string)",

[],

function() { console.log("siucc"); }

» );

});

Page 36: Your browser, your storage (extended version)

Web SQL Database is not supported by Microsoft and

Mozilla, it is on browsers based on webkit.

Page 37: Your browser, your storage (extended version)

But ...

Web SQL Database is dead!as being dropped by W3C from 18/11/10

why bother more?

Page 38: Your browser, your storage (extended version)

Web SQL Database is the only database storage engine that works on

mobile devices!

Page 39: Your browser, your storage (extended version)

IndexedDB is a nice compromise between Web Storage and Web

SQL Database.

http://qrurl.it/r/3j

Page 40: Your browser, your storage (extended version)

IndexedDB allows to create an index on a certain field stored in a standard key->value mapping.

Page 41: Your browser, your storage (extended version)

IndexedDB is promoted by all browsers vendor, but is not yet

fully supported by all

Firefox 4, Chrome 11, have full implementation. Safari 5.1 and IE 10 will have

Page 42: Your browser, your storage (extended version)

FileAPI allows to manipulate file objects, as well as

programmatically select them and access their data.

http://qrurl.it/r/3k

Page 43: Your browser, your storage (extended version)

File API includes FileReader and FileWriter APIs.

Actually is supported by Chrome, Firefox > 3.6, Safari > 5.1, Opera > 11.1.

Page 44: Your browser, your storage (extended version)

First steps on offline storage development.

http://flic.kr/p/5PnRQr

Page 45: Your browser, your storage (extended version)

Storages Status/1

Page 46: Your browser, your storage (extended version)

Storages Status/2

Page 47: Your browser, your storage (extended version)

Detect if the storing feature is supported by the browser (with

modernizr), otherwise degradate to something else.

(ie. dojox.storage)

Page 48: Your browser, your storage (extended version)

Use libraries that manage data for you

(ie. storagejs, lawnchair)

Page 49: Your browser, your storage (extended version)

Protect against lost data,

sync automatically.

http://qrurl.it/r/3o

Page 50: Your browser, your storage (extended version)

Automatically detect when

users are online.

http://qrurl.it/r/3p

Page 51: Your browser, your storage (extended version)

Do not exceed in storing data, you can store binary data base64

encoded but remember the pitfalls in performance.

Page 52: Your browser, your storage (extended version)

Avoid race conditions.

If possible use WebSQL to use its transactions features.

Page 53: Your browser, your storage (extended version)

use local storage to help your application to become faster.

Page 54: Your browser, your storage (extended version)

?

Page 55: Your browser, your storage (extended version)

jsDay + phpDay 201216-19 Maggio 2012 Verona

www.phpday.it

Page 56: Your browser, your storage (extended version)

via Quinto Bucci 20547023 Cesena (FC)info AT ideato.itwww.ideato.it

Francesco [email protected]@fullo