Using HTML5 Web LocalStorage for� improve performance and user experience
Size: 3.25 MB
Language: en
Added: Aug 11, 2016
Slides: 32 pages
Slide Content
HTML5 LOCAL STORAGE Front-End Meetup #7 Lior Zamir HPE Software Innovation Webmaster [email protected] Using HTML5 Web LocalStorage for improve performance and user experience
Agenda Why store data on the client? Methods for storing data on the client-side HTML5 Web Storage Syntax + Demo Use Cases Best Practice
Why store data on the client?
Why Store Data on the Client? Use cases: You want to increase performance . You can cache data client-side so it can be retrieved without additional server requests. You want to restore the state of your interface without forcing people to sign up (HTTP is stateless…). You want you make your application work off-line .
What are the methods for storing data on the client-side?
Methods For Storing Data JavaScript Variables Pros: The fastest and simplest solution No need to serialize or de-serialize data Ideal for single-page applications Cons: Very fragile — linking elsewhere, refreshing/closing the tab will wipe all data Global variables can be overwritten and analyzed by third-party scripts.
Methods For Storing Data Cookies Pros: A reliable method of retaining state between the client and server With expiry date - data will persist beyond page refreshes and tab closing Supported in all modern browsers Cons: Data is added to every HTTP request header Values are strings only — other data must be serialized Storage space is limited — 4KB per cookie Can be deleted or blocked Threat to internet privacy
HTML5 Web Storage
HTML5 Web Storage Pros: Easy to use with simple name/value pairs Session and persistent storage options are available An event model is available to keep other tabs and windows synchronized Wide support on desktop and mobile browsers including IE8+ Do not need to be transmitted with each HTTP request and response until required Cons: String values only — serialization may be necessary Unstructured data with no transactions, indexing or searching facilities
Can I use it?
LocalStorage vs SessionStorage SessionStorage Persists a storage area for the duration of the page session . Use it when you need to store some data temporarily . Data is available: As long as the browser is open, including page reloads/restores It gets deleted the time when the tab/window who created the session is closed LocalStorage Persists the data until the user explicitly deletes the data . Use it when you need to store some data for the long term . Data is available : Even after the browser is closed and reopened
Syntax Options for storing data : localStorage. setItem ("name", "value"); localStorage. name = "value"; localStorage ["name"] = "value"; Options for retrieving stored data: localStorage. getItem ("name"); localStorage .name ; localStorage ["name"] ;
Syntax Options for deleting stored data : localStorage. removeItem ("name"); delete localStorage.name; delete localStorage ["name"]; All of the stored data can be deleted from localStorage by using: localStorage. clear (); The syntax of sessionStorage is identical (just use “ sessionStorage ” instead of “ localStorage ”)
Example: Native API (JSON serialize of objects) vs store.js var car = {}; car.wheels = 4; car.engine = 1.8; car.name = 'Alfa Romeo' ; store.set ( 'car' , car); car = store.get ( 'car' ); console.log(car); localStorage. setItem ( 'car' , JSON. stringify (car)); car = JSON. parse ( localStorage .getItem ('car')); console.log(car); With native API + JSON serialize: With store.js:
Debug
Use Cases
Use Case #1 Improve Performance by Caching
Use Case #1 Improve Performance by Caching A faster site and an offline site: Cache API and AJAX results Cache resources (e.g. JS/CSS files) basket.js - small JavaScript library supporting localStorage caching of scripts. Google Search and Bing make extensive use of localStorage for stashing SCRIPT and STYLE blocks that are used on subsequent page views. They have shown that there are performance benefits to caching assets in localStorage (especially on mobile ) when compared to simply reading and writing from the standard browser cache.
We can load some critical path resources such as a JavaScript that's required for our UX up to 3 - 5x faster using localStorage than from the browser's native cache. Use Case #1 Improve Performance by Caching We can use localStorage to make a mobile website faster!
Use Case #2 Improve User Experience
Use Case #2 Improve user experience For apps that don't want to force user login for interactivity Save user profile and favorites (without login) Persistent app state: Open tabs, expanded/collapsed sections, layout options, dismissed messages, etc. Filled-in forms - Login username/email Unsaved/unposted drafts Stuff that's often the same autoStorage.js
If the internet gets disconnected during data transfer , the user can choose to revisit the site and resend this data . Use Case #2 Improve user experience
Other Use Cases For apps that don't have a server-side (yet/ever) For apps that live only in the client (extensions/mobile)
Best Practice
Best practice Don't: block the UI <head> <script> $('#name').html( localStorage.getItem ('name')); </script> </head> Do: defer using localStorage until onload <html> <body></body> <script> window.onload = function() { $('#name').html( localStorage.getItem ('name')); }; </script> </html>
Best practice Don't: assume localStorage works or will always work. Do: check for feature support, check if its read/write, and check if its over quota. Bad: localStorage.setItem (' bla ', ' bla '); Better: if ( window.localStorage ) { localStorage.setItem (' bla ', ' bla '); } Best: if ( window.localStorage ) { try { localStorage.setItem (' bla ', ' bla '); } catch(e ) { if (e.name === 'QUOTA_EXCEEDED_ERR' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { } else { } } } Most localStorage libraries take care of this for you.
The Dark Side Of Local Storage Any powerful technology comes with the danger of people abusing it for darker purposes. E.g. EverCookie , exploit all kind of techniques, including local storage, to store information of a user on their computer even when cookies are turned off.