Your browser, my storage
a 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
http://www.flickr.com/photos/betsyweber/4962298614/




  Cookies were introduced in
HTTP/1.0, limited to only 20 per
    domain and 4KB each.
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.
your browser, your storage
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.html
stylesheet.css
images/logo.png
scripts/main.js
# Resources that require the user to be online.
NETWORK:
login.php
/myapi
http://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.html
images/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)
http://www.flickr.com/photos/neate_photos/3529558272/




Protect against lost data,
  sync automatically.
http://www.flickr.com/photos/doctorow/2686237951/




            Automatically detect when
                users are online.
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 2012
 16-19 Maggio 2012 Verona
     www.phpday.it
Francesco Fullone
    ff@ideato.it
       @fullo



  via Quinto Bucci 205
   47023 Cesena (FC)
    info AT ideato.it
     www.ideato.it

More Related Content

PDF
Your browser, your storage (extended version)
PDF
your browser, my storage
PDF
Local Storage for Web Applications
PPTX
Local storage
PPT
Web Servers, Browsers, Server - Browser Interaction, Web Surfing
PPT
Persistent Offline Storage White
PPTX
Web Browsers
PPT
Web browser
Your browser, your storage (extended version)
your browser, my storage
Local Storage for Web Applications
Local storage
Web Servers, Browsers, Server - Browser Interaction, Web Surfing
Persistent Offline Storage White
Web Browsers
Web browser

What's hot (20)

PPT
Tutorial 1 - Browser Basics
 
DOCX
Web browser pdf
DOC
个人简历完整版-高强04052016
PPTX
World wide web architecture presentation
PPTX
How Browser Works?
PPTX
.htaccess
PPTX
Posting Images using Android
PPTX
Web Browser ! Batra Computer Centre
DOC
Lege nr. 192 2006, mo 441 2006
PPTX
Introduction to web page
PDF
Browser Performance Tests - Internet Explorer 11 vs Firefox 25 vs Google Chro...
ODP
Building Dynamic Websites With Joomla CMS
PPTX
Presentation
PPT
Apache Web Server Setup 1
PPTX
Web browers
PPTX
Web browser architecture
DOC
Importante leer
PPT
introduction to web application development
ODP
ICT project
DOC
Internet application unit2
Tutorial 1 - Browser Basics
 
Web browser pdf
个人简历完整版-高强04052016
World wide web architecture presentation
How Browser Works?
.htaccess
Posting Images using Android
Web Browser ! Batra Computer Centre
Lege nr. 192 2006, mo 441 2006
Introduction to web page
Browser Performance Tests - Internet Explorer 11 vs Firefox 25 vs Google Chro...
Building Dynamic Websites With Joomla CMS
Presentation
Apache Web Server Setup 1
Web browers
Web browser architecture
Importante leer
introduction to web application development
ICT project
Internet application unit2
Ad

Viewers also liked (6)

PPTX
Offline survival in the deadzone
PPT
Segregation And Resegregation (Online1)
PDF
Quality, Courtesy and a big Parking
PDF
Agile == Dynamic?
PPTX
Html5 storage and browser storage
ODP
Many to many: no man is an island
Offline survival in the deadzone
Segregation And Resegregation (Online1)
Quality, Courtesy and a big Parking
Agile == Dynamic?
Html5 storage and browser storage
Many to many: no man is an island
Ad

Similar to your browser, your storage (20)

PDF
Your browser, my storage
PDF
Html5 storage suggestions for challenges.pptx
PPTX
In-browser storage and me
PDF
Client-side storage
PPTX
Notes on SF W3Conf
PPTX
Client side storage on the modern web
PPT
Krug Fat Client
PDF
Naked and afraid Offline Mobile
PDF
Naked and afraid Offline mobile
PDF
An Overview of HTML5 Storage
PDF
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
PPTX
Mini-Training: To cache or not to cache
PDF
Building great mobile apps: Somethings you might want to know
PDF
Html5 apis
PDF
Html5-Web-Storage
PDF
Tech Webinar: Offline First: Creare un'app Phonegap che funzioni offline e si...
PDF
06 HTML5 Mobile
PDF
Offline strategies for HTML5 web applications - ConFoo13
PDF
WEB MODULE 5.pdf
PDF
Html5 and beyond the next generation of mobile web applications - Touch Tou...
Your browser, my storage
Html5 storage suggestions for challenges.pptx
In-browser storage and me
Client-side storage
Notes on SF W3Conf
Client side storage on the modern web
Krug Fat Client
Naked and afraid Offline Mobile
Naked and afraid Offline mobile
An Overview of HTML5 Storage
Beyond Cookies, Persistent Storage For Web Applications Web Directions North ...
Mini-Training: To cache or not to cache
Building great mobile apps: Somethings you might want to know
Html5 apis
Html5-Web-Storage
Tech Webinar: Offline First: Creare un'app Phonegap che funzioni offline e si...
06 HTML5 Mobile
Offline strategies for HTML5 web applications - ConFoo13
WEB MODULE 5.pdf
Html5 and beyond the next generation of mobile web applications - Touch Tou...

More from Francesco Fullone (20)

PDF
Life Cycle Design e Circular Economy: un caso reale
PDF
Okr istruzioni per l'uso - devfest
PDF
OKR, sono veramente utili alla mia azienda?
PDF
Okr per community - icms
PDF
Open Governance, un caso reale
PDF
A recommendation engine for your applications
PDF
A recommendation engine for your applications
PDF
Con te non ci lavoro
PDF
Con te non ci lavoro
PDF
Continuous budgeting
PDF
Remote working istruzioni
PDF
Remote working istruzioni
PDF
MVP & Startup, with OpenSource Software and Microsoft Azure
PDF
Remote working istruzioni
PDF
Help yourself, grow an healthy ecosystem
PDF
Outsourcing, partners or suppliers?
PDF
From brainstorming to product development
PDF
Compromises and not solution
PDF
PHP Goes Enterprise
PDF
From webagency to...a better job, life and a lot of fun
Life Cycle Design e Circular Economy: un caso reale
Okr istruzioni per l'uso - devfest
OKR, sono veramente utili alla mia azienda?
Okr per community - icms
Open Governance, un caso reale
A recommendation engine for your applications
A recommendation engine for your applications
Con te non ci lavoro
Con te non ci lavoro
Continuous budgeting
Remote working istruzioni
Remote working istruzioni
MVP & Startup, with OpenSource Software and Microsoft Azure
Remote working istruzioni
Help yourself, grow an healthy ecosystem
Outsourcing, partners or suppliers?
From brainstorming to product development
Compromises and not solution
PHP Goes Enterprise
From webagency to...a better job, life and a lot of fun

Recently uploaded (20)

PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PPTX
The various Industrial Revolutions .pptx
PDF
A contest of sentiment analysis: k-nearest neighbor versus neural network
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PPTX
Chapter 5: Probability Theory and Statistics
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PPT
What is a Computer? Input Devices /output devices
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Five Habits of High-Impact Board Members
PPT
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
PDF
Getting started with AI Agents and Multi-Agent Systems
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PDF
STKI Israel Market Study 2025 version august
PDF
sbt 2.0: go big (Scala Days 2025 edition)
PPTX
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
PPTX
Modernising the Digital Integration Hub
PDF
Consumable AI The What, Why & How for Small Teams.pdf
PDF
How IoT Sensor Integration in 2025 is Transforming Industries Worldwide
PDF
“A New Era of 3D Sensing: Transforming Industries and Creating Opportunities,...
PDF
Developing a website for English-speaking practice to English as a foreign la...
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
The various Industrial Revolutions .pptx
A contest of sentiment analysis: k-nearest neighbor versus neural network
NewMind AI Weekly Chronicles – August ’25 Week III
Chapter 5: Probability Theory and Statistics
A proposed approach for plagiarism detection in Myanmar Unicode text
What is a Computer? Input Devices /output devices
Module 1.ppt Iot fundamentals and Architecture
Five Habits of High-Impact Board Members
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
Getting started with AI Agents and Multi-Agent Systems
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
STKI Israel Market Study 2025 version august
sbt 2.0: go big (Scala Days 2025 edition)
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
Modernising the Digital Integration Hub
Consumable AI The What, Why & How for Small Teams.pdf
How IoT Sensor Integration in 2025 is Transforming Industries Worldwide
“A New Era of 3D Sensing: Transforming Industries and Creating Opportunities,...
Developing a website for English-speaking practice to English as a foreign la...

your browser, your storage

  • 1. Your browser, my storage a new approach on data storing Francesco Fullone ff AT ideato.it
  • 2. Who am I Francesco Fullone aka Fullo - PHP developer since 1999 - President - and Open Source Evangelist - CEO @ - founder @ - Nerd and geek
  • 3. 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
  • 4. Persistent local storage is one of the areas where client applications traditionally win against web applications.
  • 5. A jump in the past
  • 6. http://www.flickr.com/photos/betsyweber/4962298614/ Cookies were introduced in HTTP/1.0, limited to only 20 per domain and 4KB each.
  • 7. Cookies are sent to and from client at any connection. http://www.flickr.com/photos/dionhinchcliffe/4326080515
  • 8. Microsoft with Internet Explorer 6 introduced dHTML and the userData API to store up to 64KB of data
  • 9. Mozilla introduced with Firefox 2 the DOM Storage API, it will then know as Web Storage.
  • 10. 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.
  • 11. With Flash 8, in 2006, Adobe introduced the ExternalInterface to allow Js to access to the stored resources.
  • 12. 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).
  • 13. Google created Gears in 2007, that introduced a database paradigm (based on SQLite) to the storage problem.
  • 14. All these storage systems had different APIs, a common platform is needed by all the browser vendors.
  • 16. The two approaches of storing: Application Cache Offline storage
  • 17. Application Caching involves saving the application's core logic and user-interface. http://www.whatwg.org/specs/web-apps/current- work/#applicationcache
  • 18. It is enabled by a file .manifest that declares which resources have to be saved locally. (theoretically limited to 5MB).
  • 19. CACHE MANIFEST # Explicitly cached entries CACHE: index.html stylesheet.css images/logo.png scripts/main.js # Resources that require the user to be online. NETWORK: login.php /myapi http://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.html images/large/ images/offline.jpg
  • 20. applicationCache can use events to trigger application behavior – window.applicationCache.onchecking = function(e) { • log("Checking for application update"); –}
  • 21. 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)
  • 22. Data storage is about capturing specific data, or resources the user has expressed interest in. http://www.flickr.com/photos/bfionline/2380398365/
  • 24. Web Storage is the simpler implementation of the Data Storage paradigm. http://dev.w3.org/html5/webstorage/
  • 25. Web Storage is based on a structure of key-value pairs like any JavaScript object. localStorage.setItem("bar", foo);
  • 26. 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"]);
  • 27. Web Storage should be local based or session based. var bar = localStorage["bar"]; var foo = sessionStorage["foo"];
  • 28. 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.
  • 29. localStorage relies only on client, so we have to track changes and use storage.events to sync server and client if needed.
  • 30. Web SQL Database is WAS just an offline SQL implementation, based on SQLite. http://dev.w3.org/html5/webdatabase/
  • 31. 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"); } » ); });
  • 32. Web SQL Database is not supported by Microsoft and Mozilla, instead it is on browsers based on webkit.
  • 33. But ... Web SQL Database is dead! as being dropped by W3C from 18/11/10 why bother more?
  • 34. Web SQL Database is the only database storage engine working on mobile devices!
  • 35. IndexedDB is a nice compromise between Web Storage and Web SQL Database. http://www.w3.org/TR/IndexedDB/
  • 36. IndexedDB allows to create an index on a certain field stored in a standard key->value mapping.
  • 37. 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
  • 38. FileAPI or File Storage will give us a way to store a lot of data. http://www.w3.org/TR/FileAPI/
  • 39. File API includes FileReader and FileWriter APIs. Actually is supported by Chrome, Firefox > 3.6, Safari > 5.1, Opera > 11.1.
  • 40. First steps on offline storage development. http://www.flickr.com/photos/45449692@N00/3161567381
  • 43. Detect if the storing feature is supported by the browser (with modernizr), otherwise degradate to something else. (ie. dojox.storage)
  • 45. http://www.flickr.com/photos/doctorow/2686237951/ Automatically detect when users are online.
  • 46. Do not exceed in storing data, you can store binary data base64 encoded but remember the pitfalls in performance.
  • 47. Avoid race conditions. If possible use WebSQL to use its transactions features.
  • 48. use local storage to help your application to become faster.
  • 49. ?
  • 50. jsDay + phpDay 2012 16-19 Maggio 2012 Verona www.phpday.it
  • 51. Francesco Fullone ff@ideato.it @fullo via Quinto Bucci 205 47023 Cesena (FC) info AT ideato.it www.ideato.it