Web Workers in Javascript
Last Updated :
31 Jul, 2024
Web workers are giving us the possibility to write multi-threaded Javascript, which does not block the DOM. Even the Asynchronous operations block the DOM to some extent. On the other side, web workers help us solve this problem, escaping the single-threaded environment and reaching a higher performance of our web pages.
In order to use:
Web workers live in their own file (Not interacting with the User Interface) Functions are Passed By Copy No global variables are allowedImplementing Web Workers
javascript
/* -----------------------------Index.JS--------------------------*/
// Check if web worker functionality is available for the browser
if(window.Worker){
// Creating new web worker using constructor
var worker = new Worker('worker.js');
var message = 'Hello';
// Sending the message using postMessage
worker.postMessage(message);
// On response
worker.onmessage = function(e) {
console.log(e.data);
};
}
/* -----------------------------Worker.JS--------------------------*/
// Waits for any activity from the page
self.onmessage = function(e) {
if(e.data !== undefined) {
// Do work
var total = e.data + ' World';
// Posting back to the page
self.postMessage(total)
}
}
// Terminate with: worker.terminate()
In the example above, the worker is doing the work of concatenating the received string with the defined one and sends it back to the main.js file without interrupting the page.
Output :'Hello World'
Web Workers does not have access to:
The Parent Object The Window Object The Document Object The DOM
However, the do have access to:
The location object The navigator object XMLHttpRequest The Application Cache Spawning other web workers (Stored at the same origin as the parent page) Importing external script using importScripts()
Common use cases:
When complex computing calculations are required In HTML5 Games (Higher frame rate) At any websites containing JavaScript for performance improvement
Real World Example
The following program is written for the reason to show what difference is in the behavior of our page with and without worker.
javascript
/* -----------------------------Index.JS--------------------------*/
const delay = 5000;
// Get element of without worker button
const noWorkerBtn = document.getElementById('worker--without');
// Add event listener to the button itself
noWorkerBtn.addEventListener('click', () => {
// Define the starting time
const start = performance.now();
// Do complex calculations
while (performance.now() - start < delay);
// Get the ending time
const end = performance.now();
// Calculate the difference in time
const resWithoutWorker = end - start;
// Log the result
console.log('No worker:', resWithoutWorker);
});
// Define a worker
const worker = new Worker('./worker.js');
// Get element of with worker button
const workerBtn = document.getElementById('worker--with');
// Add event listener to the button
workerBtn.addEventListener('click', () => {
// Send delay number
worker.postMessage(delay);
});
// On message from worker
worker.onmessage = e => {
// Log the result
console.log("With worker: ", e.data);
};
/* -----------------------------Worker.JS--------------------------*/
// On message received
this.onmessage = e => {
// Delay equals to data received
const delay = e.data;
// Define starting time
const start = performance.now();
// Do the complex calculation
while (performance.now() - start < delay);
// Get ending time
const end = performance.now();
// Calculate difference
const resWithWorker = end - start;
// Send result
this.postMessage(end - start);
};
Examples:
Output: 'No worker: 5000'
Output: 'With worker: 5000'
That's how the page behaves without our worker code:
The animation freezes because the JavaScript is blocking the DOM.That's how the page behaves with our worker code:
As you can see the animation in the background is not interrupted as our worker does the calculation for us. In this way, we let the DOM thread run independently.
Similar Reads
How JavaScript Works? JavaScript is a dynamically typed, cross-platform threaded scripting and programming language, used to put functionality and interactivity at the client side as well as to write logic on the server side of a website. It can display content updates, interactive maps, control multimedia, interactive f
13 min read
Uses of JavaScript JavaScript is a versatile programming language extensively used in web development. It empowers interactive features like form validation, dynamic content updates, and user interface enhancements. Furthermore, it's employed in server-side scripting, mobile app development, game development, and even
3 min read
What is JavaScript? JavaScript is a powerful and flexible programming language for the web that is widely used to make websites interactive and dynamic. JavaScript can also able to change or update HTML and CSS dynamically. JavaScript can also run on servers using tools like Node.js, allowing developers to build entire
6 min read
JavaScript Hello World The JavaScript Hello World program is a simple tradition used by programmers to learn the new syntax of a programming language. It involves displaying the text "Hello, World!" on the screen. This basic exercise helps you understand how to output text and run simple scripts in a new programming envir
2 min read
JavaScript | Top 10 Tips and Tricks For web development or cross-platform development, JavaScript is gaining wide popularity. Once it was considered only as a front-end scripting language but it's now getting popularity as the back-end too. Even Facebook's React Native is based on JavaScript. Hence it would surely be beneficial to kno
6 min read