SlideShare a Scribd company logo
1 of 22
Download to read offline
HTML5 Web Storage
(DOM storage)




                    ©Inbal Geffen 2012
Why?
●   HTTP is stateless

●   We want to keep record of what the user did

●   We want to be able to work "offline"

●   We don't want to force users to signup / login




                                                     ©Inbal Geffen 2012
Cookies
●   Used before HTML5 Web Storage

●   4KB memory limitation per cookie

●   Sent in every request

●   Have a "bad reputation"




                                       ©Inbal Geffen 2012
localStorage vs.
sessionStorage
In Both
●   Data is stored as key/value pairs

●   Data is stored in string form

●   Use the same API : setItem(), getItem(), clear(), removeItem()

●   Fire 'storage' event




                                                                 ©Inbal Geffen 2012
localStorage vs.
sessionStorage
Differ in scope and lifetime
●   sessionStorage is stored until the window is closed

●   localStorage is stored until the storage is cleared

●   localStorage is synchronized within the browser windows and tabs

●   sessionStorage - multiple instances of the same window without collision




                                                                ©Inbal Geffen 2012
Web Storage Support
●   We must remember that not all browsers support "Web Storage"




function checkStorageSupport() {
        if (!window.localStorage) {
        alert('This browser does NOT support localStorage');
        }
   }




                                                               ©Inbal Geffen 2012
Web Storage API
setItem
//set Item in local storage
localStorage.setItem("userName", userName);

//can also use immediate set, but this is less recommended
localStorage.userName=userName;



//set Item in session storage
sessionStorage.setItem("userName", userName);

//can also use the immediate set, but this is less recommended
sessionStorage.userName=userName;


                                                                 ©Inbal Geffen 2012
Web Storage API
getItem
//get Item in local storage
var userName = localStorage.getItem("userName);

//can also use immediate get, but this is less recommended
var userName = localStorage.userName;



//get Item in session storage
sessionStorage.getItem("userName);

//can also use the immediate set, but this is less recommended
var userName = sessionStorage.userName;


                                                                 ©Inbal Geffen 2012
Web Storage API
clear(), removeItem
//clear the local storage
localStorage.clear();

//remove specific item from local storage
localStorage.removeItem("userName");
//localStorage.getItem("userName") => NULL

//clear the session storage
sessionStorage.clear();

//remove specific item from session storage
sessionStorage.removeItem("userName");



                                              ©Inbal Geffen 2012
Web Storage API

●   Web Storage is an array

●   localStorage.length

●   Item in the ith position in the array : localStorage.key(i)




                                                                  ©Inbal Geffen 2012
Storage Event
//Fired when performing an operation on the storage


if (window.addEventListener) {
    window.addEventListener("storage", handleStorageEvent, false);
} else {
    // for IE versions below IE9
    window.attachEvent("onstorage", handleStorageEvent);
};

function handleStorageEvent(eventData) {
  // Do something
}



                                                                 ©Inbal Geffen 2012
Things to remember
• Local storage persists until it is deleted or the browser’s cache is cleared.

• Session storage persists until it is deleted or the browsing context is closed.

• Data stored by one browser is not accessible by another browser.
  For example, data stored by Chrome is not seen by Firefox.

• Objects should be stored as strings.

• For security reasons, sensitive data should not be stored, especially in local
  storage.

• Changes to a storage area cause a “storage” event to be fired.

• As with many other HTML5 features, web storage is not yet implemented
  consistently.


                                                                       ©Inbal Geffen 2012
HTML5 Web Workers




                    ©Inbal Geffen 2012
THE PROBLEM:
 JAVASCRIPT CONCURRENCY
• JavaScript is a single-threaded environment

• Used to be "solved" with asynchronous techniques such as:
  setTimeout(), setInterval(), XMLHttpRequest, and event handlers

• Asynchronous events are processed after the current executing script

• Web Workers are the HTML5 solution, enabling multi threading




                                                                    ©Inbal Geffen 2012
Web Workers - Use Cases

Doing an action/process on the background, without harming the UI
Show something to the user and then we can update the UI with the result.

●   Updating many rows of local web database

●   Processing large arrays

●   Background I/O - fetch data for later

●   Spell checker

●   Code syntax highlighting or other real-time text formatting




                                                                     ©Inbal Geffen 2012
Web Workers Support
●   We need to remember to check browser support for web workers

function checkWorkerSupport() {
         if (typeof(window.Worker) === "undefined")
         alert("Your browser doesn't support HTML5 Web Workers!");
    }




                                                               ©Inbal Geffen 2012
Create Web Worker - 1
●   Web workers run from an external JS file
    (We will use a file called primesWorker.js as an example)

●   Web workers will be called from our HTML file

●   So we need two files : our HTML file and a JS file

●   Communication is done using messages : postMessage()

●   Ths JS file will have the function we would like to run on a different thread

●   The HTML file will:
     ○ Call the Web Worker (using javascript)
     ○ Respond to the Web Worker's messages
     ○ Change the UI



                                                                     ©Inbal Geffen 2012
Create Web Worker - 2
Main HTML file - create web worker

●   Create a new instance of web worker
    The worker gets the file name as a parameter
    var worker = new Worker("primesWorker.js");

●   If the file exists, a new thread will be asynchronously created

●   Calling the worker: postMessage()
    worker.postMessage(100);

●   postMessage() can get one parameter

●   This is the parameter that will be sent to the worker

●   So we see we can send messages to the worker from the HTML file

                                                                      ©Inbal Geffen 2012
Create Web Worker - 3
Main HTML file - get info from web worker

●   Getting messages FROM the worker


●   We need to listen to the 'message' event

worker.onmessage = function (e) {
        //do something with the message we got from the worker
        }




                                                                 ©Inbal Geffen 2012
Create Web Worker - 4
Main HTML file - errors

●   Check for errors

// Show errors from the worker
        worker.onerror = function (error) {
        alert(error.data);
        }




                                              ©Inbal Geffen 2012
Features Available to Workers
Due to their multi-threaded behavior, web workers only has access to a subset
of JavaScript's features:

 ●   The navigator object

 ●   The location object (contains information about the current URL)

 ●   XMLHttpRequest

 ●   setTimeout()/clearTimeout() and setInterval()/clearInterval()

 ●   Importing external scripts using the importScripts() method

 ●   Spawning other web workers


                                                                     ©Inbal Geffen 2012
Workers do NOT have access
 ●   The DOM (it's not thread-safe)

 ●   The window object

 ●   The document object

 ●   The parent object


That's why we need to communicate using messages.




                                                    ©Inbal Geffen 2012

More Related Content

What's hot

Website Development Process
Website Development ProcessWebsite Development Process
Website Development Process
Hend Al-Khalifa
 

What's hot (20)

Website Development Process
Website Development ProcessWebsite Development Process
Website Development Process
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Web development tool
Web development toolWeb development tool
Web development tool
 
Web Designing Presentation
Web Designing PresentationWeb Designing Presentation
Web Designing Presentation
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
 
Web 3.0
Web 3.0Web 3.0
Web 3.0
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
Spring Security 3
Spring Security 3Spring Security 3
Spring Security 3
 
Resource-Oriented Architecture (ROA)
Resource-Oriented Architecture (ROA)Resource-Oriented Architecture (ROA)
Resource-Oriented Architecture (ROA)
 
REST API
REST APIREST API
REST API
 
Semantic web Document
Semantic web DocumentSemantic web Document
Semantic web Document
 
Ajax ppt - 32 slides
Ajax ppt - 32 slidesAjax ppt - 32 slides
Ajax ppt - 32 slides
 
Wordpress ppt
Wordpress pptWordpress ppt
Wordpress ppt
 
Web Development
Web DevelopmentWeb Development
Web Development
 
Web Development Workshop (Front End)
Web Development Workshop (Front End)Web Development Workshop (Front End)
Web Development Workshop (Front End)
 
Modern Web Development
Modern Web DevelopmentModern Web Development
Modern Web Development
 
Java web services using JAX-WS
Java web services using JAX-WSJava web services using JAX-WS
Java web services using JAX-WS
 
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
 
Web application framework
Web application frameworkWeb application framework
Web application framework
 

Viewers also liked

Personas: Understanding the User Behind the Visit
Personas: Understanding the User Behind the VisitPersonas: Understanding the User Behind the Visit
Personas: Understanding the User Behind the Visit
Michael King
 

Viewers also liked (10)

Html5 storage suggestions for challenges.pptx
Html5 storage   suggestions for challenges.pptxHtml5 storage   suggestions for challenges.pptx
Html5 storage suggestions for challenges.pptx
 
Local storage in Web apps
Local storage in Web appsLocal storage in Web apps
Local storage in Web apps
 
Best Web-based Data Visualization tools
Best Web-based Data Visualization tools Best Web-based Data Visualization tools
Best Web-based Data Visualization tools
 
HTML5 Local Storage
HTML5 Local StorageHTML5 Local Storage
HTML5 Local Storage
 
HTML5 Storage/Cache
HTML5 Storage/CacheHTML5 Storage/Cache
HTML5 Storage/Cache
 
Html5 web storage
Html5 web storageHtml5 web storage
Html5 web storage
 
PyCon 2012: Python for data lovers: explore it, analyze it, map it
PyCon 2012: Python for data lovers: explore it, analyze it, map it PyCon 2012: Python for data lovers: explore it, analyze it, map it
PyCon 2012: Python for data lovers: explore it, analyze it, map it
 
Html5-Web-Storage
Html5-Web-StorageHtml5-Web-Storage
Html5-Web-Storage
 
Personas: Understanding the User Behind the Visit
Personas: Understanding the User Behind the VisitPersonas: Understanding the User Behind the Visit
Personas: Understanding the User Behind the Visit
 
Cloud storage slides
Cloud storage slidesCloud storage slides
Cloud storage slides
 

Similar to Web Storage & Web Workers

Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...
boxuno
 
Make Mobile Apps Quickly
Make Mobile Apps QuicklyMake Mobile Apps Quickly
Make Mobile Apps Quickly
Gil Irizarry
 
Hibernate complete Training
Hibernate complete TrainingHibernate complete Training
Hibernate complete Training
sourabh aggarwal
 
Persistent Offline Storage White
Persistent Offline Storage WhitePersistent Offline Storage White
Persistent Offline Storage White
Alexei White
 
Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)
Per Henrik Lausten
 

Similar to Web Storage & Web Workers (20)

webworkers
webworkerswebworkers
webworkers
 
Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...Should you use HTML5 to build your product? The pros & cons of using current ...
Should you use HTML5 to build your product? The pros & cons of using current ...
 
Make Mobile Apps Quickly
Make Mobile Apps QuicklyMake Mobile Apps Quickly
Make Mobile Apps Quickly
 
Hibernate complete Training
Hibernate complete TrainingHibernate complete Training
Hibernate complete Training
 
PyGrunn2013 High Performance Web Applications with TurboGears
PyGrunn2013  High Performance Web Applications with TurboGearsPyGrunn2013  High Performance Web Applications with TurboGears
PyGrunn2013 High Performance Web Applications with TurboGears
 
Persistent Offline Storage White
Persistent Offline Storage WhitePersistent Offline Storage White
Persistent Offline Storage White
 
Introduction to Performance APIs
Introduction to Performance APIsIntroduction to Performance APIs
Introduction to Performance APIs
 
Sprint 17
Sprint 17Sprint 17
Sprint 17
 
Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)
 
Web worker
Web workerWeb worker
Web worker
 
WP - Unit I.ppt
WP - Unit I.pptWP - Unit I.ppt
WP - Unit I.ppt
 
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
 
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
Make Cross-platform Mobile Apps Quickly - SIGGRAPH 2014
 
Node Web Development 2nd Edition: Chapter1 About Node
Node Web Development 2nd Edition: Chapter1 About NodeNode Web Development 2nd Edition: Chapter1 About Node
Node Web Development 2nd Edition: Chapter1 About Node
 
Node JS Crash Course
Node JS Crash CourseNode JS Crash Course
Node JS Crash Course
 
HTML5 Web storage
HTML5 Web storageHTML5 Web storage
HTML5 Web storage
 
Polymer Web Framework - Swecha Boot Camp
Polymer Web Framework - Swecha Boot CampPolymer Web Framework - Swecha Boot Camp
Polymer Web Framework - Swecha Boot Camp
 
Brief history of web components
Brief history of web componentsBrief history of web components
Brief history of web components
 
At Your Service - Abusing the Service Workers Web API
At Your Service - Abusing the Service Workers Web APIAt Your Service - Abusing the Service Workers Web API
At Your Service - Abusing the Service Workers Web API
 
PHP BASIC PRESENTATION
PHP BASIC PRESENTATIONPHP BASIC PRESENTATION
PHP BASIC PRESENTATION
 

More from Inbal Geffen

More from Inbal Geffen (9)

Css3
Css3Css3
Css3
 
Jqeury ajax plugins
Jqeury ajax pluginsJqeury ajax plugins
Jqeury ajax plugins
 
Jquery mobile2
Jquery mobile2Jquery mobile2
Jquery mobile2
 
Jquery2
Jquery2Jquery2
Jquery2
 
J querypractice
J querypracticeJ querypractice
J querypractice
 
J queryui
J queryuiJ queryui
J queryui
 
Mysql & Php
Mysql & PhpMysql & Php
Mysql & Php
 
jQuery mobile UX
jQuery mobile UXjQuery mobile UX
jQuery mobile UX
 
Jqeury ajax plugins
Jqeury ajax pluginsJqeury ajax plugins
Jqeury ajax plugins
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 

Web Storage & Web Workers

  • 1. HTML5 Web Storage (DOM storage) ©Inbal Geffen 2012
  • 2. Why? ● HTTP is stateless ● We want to keep record of what the user did ● We want to be able to work "offline" ● We don't want to force users to signup / login ©Inbal Geffen 2012
  • 3. Cookies ● Used before HTML5 Web Storage ● 4KB memory limitation per cookie ● Sent in every request ● Have a "bad reputation" ©Inbal Geffen 2012
  • 4. localStorage vs. sessionStorage In Both ● Data is stored as key/value pairs ● Data is stored in string form ● Use the same API : setItem(), getItem(), clear(), removeItem() ● Fire 'storage' event ©Inbal Geffen 2012
  • 5. localStorage vs. sessionStorage Differ in scope and lifetime ● sessionStorage is stored until the window is closed ● localStorage is stored until the storage is cleared ● localStorage is synchronized within the browser windows and tabs ● sessionStorage - multiple instances of the same window without collision ©Inbal Geffen 2012
  • 6. Web Storage Support ● We must remember that not all browsers support "Web Storage" function checkStorageSupport() { if (!window.localStorage) { alert('This browser does NOT support localStorage'); } } ©Inbal Geffen 2012
  • 7. Web Storage API setItem //set Item in local storage localStorage.setItem("userName", userName); //can also use immediate set, but this is less recommended localStorage.userName=userName; //set Item in session storage sessionStorage.setItem("userName", userName); //can also use the immediate set, but this is less recommended sessionStorage.userName=userName; ©Inbal Geffen 2012
  • 8. Web Storage API getItem //get Item in local storage var userName = localStorage.getItem("userName); //can also use immediate get, but this is less recommended var userName = localStorage.userName; //get Item in session storage sessionStorage.getItem("userName); //can also use the immediate set, but this is less recommended var userName = sessionStorage.userName; ©Inbal Geffen 2012
  • 9. Web Storage API clear(), removeItem //clear the local storage localStorage.clear(); //remove specific item from local storage localStorage.removeItem("userName"); //localStorage.getItem("userName") => NULL //clear the session storage sessionStorage.clear(); //remove specific item from session storage sessionStorage.removeItem("userName"); ©Inbal Geffen 2012
  • 10. Web Storage API ● Web Storage is an array ● localStorage.length ● Item in the ith position in the array : localStorage.key(i) ©Inbal Geffen 2012
  • 11. Storage Event //Fired when performing an operation on the storage if (window.addEventListener) { window.addEventListener("storage", handleStorageEvent, false); } else { // for IE versions below IE9 window.attachEvent("onstorage", handleStorageEvent); }; function handleStorageEvent(eventData) { // Do something } ©Inbal Geffen 2012
  • 12. Things to remember • Local storage persists until it is deleted or the browser’s cache is cleared. • Session storage persists until it is deleted or the browsing context is closed. • Data stored by one browser is not accessible by another browser. For example, data stored by Chrome is not seen by Firefox. • Objects should be stored as strings. • For security reasons, sensitive data should not be stored, especially in local storage. • Changes to a storage area cause a “storage” event to be fired. • As with many other HTML5 features, web storage is not yet implemented consistently. ©Inbal Geffen 2012
  • 13. HTML5 Web Workers ©Inbal Geffen 2012
  • 14. THE PROBLEM: JAVASCRIPT CONCURRENCY • JavaScript is a single-threaded environment • Used to be "solved" with asynchronous techniques such as: setTimeout(), setInterval(), XMLHttpRequest, and event handlers • Asynchronous events are processed after the current executing script • Web Workers are the HTML5 solution, enabling multi threading ©Inbal Geffen 2012
  • 15. Web Workers - Use Cases Doing an action/process on the background, without harming the UI Show something to the user and then we can update the UI with the result. ● Updating many rows of local web database ● Processing large arrays ● Background I/O - fetch data for later ● Spell checker ● Code syntax highlighting or other real-time text formatting ©Inbal Geffen 2012
  • 16. Web Workers Support ● We need to remember to check browser support for web workers function checkWorkerSupport() { if (typeof(window.Worker) === "undefined") alert("Your browser doesn't support HTML5 Web Workers!"); } ©Inbal Geffen 2012
  • 17. Create Web Worker - 1 ● Web workers run from an external JS file (We will use a file called primesWorker.js as an example) ● Web workers will be called from our HTML file ● So we need two files : our HTML file and a JS file ● Communication is done using messages : postMessage() ● Ths JS file will have the function we would like to run on a different thread ● The HTML file will: ○ Call the Web Worker (using javascript) ○ Respond to the Web Worker's messages ○ Change the UI ©Inbal Geffen 2012
  • 18. Create Web Worker - 2 Main HTML file - create web worker ● Create a new instance of web worker The worker gets the file name as a parameter var worker = new Worker("primesWorker.js"); ● If the file exists, a new thread will be asynchronously created ● Calling the worker: postMessage() worker.postMessage(100); ● postMessage() can get one parameter ● This is the parameter that will be sent to the worker ● So we see we can send messages to the worker from the HTML file ©Inbal Geffen 2012
  • 19. Create Web Worker - 3 Main HTML file - get info from web worker ● Getting messages FROM the worker ● We need to listen to the 'message' event worker.onmessage = function (e) { //do something with the message we got from the worker } ©Inbal Geffen 2012
  • 20. Create Web Worker - 4 Main HTML file - errors ● Check for errors // Show errors from the worker worker.onerror = function (error) { alert(error.data); } ©Inbal Geffen 2012
  • 21. Features Available to Workers Due to their multi-threaded behavior, web workers only has access to a subset of JavaScript's features: ● The navigator object ● The location object (contains information about the current URL) ● XMLHttpRequest ● setTimeout()/clearTimeout() and setInterval()/clearInterval() ● Importing external scripts using the importScripts() method ● Spawning other web workers ©Inbal Geffen 2012
  • 22. Workers do NOT have access ● The DOM (it's not thread-safe) ● The window object ● The document object ● The parent object That's why we need to communicate using messages. ©Inbal Geffen 2012