your browser, your storage

Preview:

DESCRIPTION

manage data on the browser is the new pr0n for frontend developers. Let's discover how it works and which are the browsers pitfall...

Citation preview

Your browser, my storagea new approach on data storing

Francesco Fullone

ff AT ideato.it

Who am I

Francesco Fullone aka Fullo

- PHP developer since 1999

- President

- and Open Source Evangelist

- CEO @

- founder @

- Nerd and geek

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

Persistent local storage is one of the areas where client

applications traditionally win against web applications.

A jump in the past

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

domain and 4KB each.

http://www.flickr.com/photos/betsyweber/4962298614/

Cookies are sent to and from client at any connection.

http://www.flickr.com/photos/dionhinchcliffe/4326080515

Microsoft with Internet Explorer 6 introduced dHTML and the

userData API to store up to 64KB of data

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

know as Web Storage.

Adobe, in 2002, created the Flash Cookies aka “Local Shared

Objects” for Flash 6.

Data storage increased to 100KB but it was difficult to be used.

With Flash 8, in 2006, Adobe introduced the

ExternalInterface to allow Js to access

to the stored resources.

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).

Google created Gears in 2007, that introduced a database

paradigm (based on SQLite) to the storage problem.

All these storage systems had different APIs, a common

platform is needed by all the browser vendors.

The two approaches of storing:

Application Cache

Offline storage

Application Caching involves saving the application's core logic

and user-interface.

http://www.whatwg.org/specs/web-apps/current-work/#applicationcache

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

have to be saved locally.

(theoretically limited to 5MB).

CACHE MANIFEST

# Explicitly cached entries

CACHE:index.htmlstylesheet.cssimages/logo.pngscripts/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

applicationCache can use events to trigger application behavior

– window.applicationCache.onchecking = function(e) {

• log("Checking for application update");

– }

If you change a

resource and you

don't update (rev)

the .manifest the

browser may not

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

Data storage is about capturing specific

data, or resources the user has expressed

interest in.http://www.flickr.com/photos/bfionline/2380398365/

Approaches to

Data Storage

Web Storage is the simpler implementation of the Data

Storage paradigm.

http://dev.w3.org/html5/webstorage/

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

any JavaScript object.

localStorage.setItem("bar", foo);

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"]);

Web Storage should be local based or session based.

var bar = localStorage["bar"];

var foo = sessionStorage["foo"];

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.

localStorage relies only on client, so we have to track

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

needed.

Web SQL Database is WAS just an offline SQL implementation,

based on SQLite.

http://dev.w3.org/html5/webdatabase/

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"); }

» );

});

Web SQL Database is not supported by Microsoft and

Mozilla, instead it is on browsers based on webkit.

But ...

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

why bother more?

Web SQL Database is the only database storage engine

working on mobile devices!

IndexedDB is a nice compromise between Web Storage and Web

SQL Database.

http://www.w3.org/TR/IndexedDB/

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

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

FileAPI or File Storage will give us a way to store a lot of data.

http://www.w3.org/TR/FileAPI/

File API includes FileReader and FileWriter APIs.

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

First steps on offline storage development.

http://www.flickr.com/photos/45449692@N00/3161567381

Storages Status/1

Storages Status/2

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

modernizr), otherwise degradate to something else.

(ie. dojox.storage)

Protect against lost data,

sync automatically.

http://www.flickr.com/photos/neate_photos/3529558272/

Automatically detect when

users are online.

http://www.flickr.com/photos/doctorow/2686237951/

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

encoded but remember the pitfalls in performance.

Avoid race conditions.

If possible use WebSQL to use its transactions features.

use local storage to help your application to become faster.

?

jsDay + phpDay 201216-19 Maggio 2012 Verona

www.phpday.it

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

Francesco Fulloneff@ideato.it@fullo