Web Storage
Web applications can store and retrieve data to track the user's preferences, record application settings or keep subsidiary resources on the client side. A client offline storage is a data management solution implemented according to one of the following models:
- Web Storage - a key/value store model based on string mappings;
- Web SQL Database - an SQL database implementation; this is a full-featured relational DB system; however, it is considered deprecated and is not supported in Internet Explorer and Firefox;
- Indexed Database - a database system for storing complex objects; the IndexedDB supports records indexing and cursor operations;
- File API - a number of interfaces allowing the developer to create file system hierarchies.
HTML5 Web Storage
Web Storage is a simple data management system keeping its data items as random-access records. It can be considered a "client-side NoSQL" solution. The storage provides four types of logical operations: placing an item locally as a key/value mapping; getting a value by looking up its key; changing an item's value; deleting an item from the storage.
The storage interfaces are exposed as part of local storage or session storage: the latter is limited to the lifetime of the current browsing context. In both cases the storage functionality is obtained through the use of the global window attributes:
console.log(localStorage.length); // window.localStorage
Here's an example of placing three data records in the local storage. The code snippet sets song titles as keys and names of artists as values:
localStorage.setItem("Justify My Love", "Madonna");
localStorage.setItem("Bohemian Rhapsody", "Freddie Mercury");
localStorage.setItem("I Got Stung", "Elvis Presley");
The same operations can be performed in a dictionary-like notation:
localStorage["You'll See"]="Madonna";
localStorage["I Want To Break Free"]="Freddie Mercury";
localStorage["Love Me Tender"]="Elvis Presley";
As a dictionary is an unordered set of key/value pairs, obtaining a value requires the knowledge of its corresponding key:
console.log("'Justify My Love' was performed by "+localStorage.getItem("Justify My Love"));
console.log("'Love Me Tender' was performed by "+localStorage["Love Me Tender"]);
Calling the removeItem() method deletes data items:
localStorage.removeItem("I Got Stung");
To control the size of the storage and number of its items, two properties can be used: these are remainingSpace and length. The remainingSpace property is implemented in Internet Explorer and has a default value of 5000000 bytes. The length of the storage reflects the amount of the data items:
console.log(localStorage.length); // returns 5 as one of the items was removed
Getting keys is performed with the help of the key() method; the method accepts a key index as its only argument:
for(var i=0; i<localStorage.length; i++) {
var song=localStorage.key(i);
var singer=localStorage.getItem(song);
console.log(song+" was performed by "+singer);
}
To empty the storage completely, the clear() method is invoked:
localStorage.clear();
console.log(localStorage.length); // length is 0
The same set of methods and properties is available for the session storage:
console.log(sessionStorage.length); // window.sessionStorage