web workers
user profile avatar
Tech Wizard
Author

Published on • 🕑4 min read

A Guide to Understanding Web Workers

4likes3

Blog views718

Listen to this blog
share this blog

Share Post

logoA Guide to Understanding Web Workers


Facebook
X
Whatsapp
Telegram
Reddit
Linkedin
Instapaper
Pinterest
Email
QR Code
More..

If you are a web developer who spends a lot of time working, you might think of yourself as a web worker. However, we are sorry this username is taken. The World Wide Web hides many mysteries, and understanding fully how browsers work is challenging. This blog unravels the mystery of web workers, the hidden unpaid interns in websites.

We will explore what web workers are and how they help improve performance through multi-threading, and also explore how to create, communicate and destroy a web worker. 

Let's dive in.

What are Web Workers?

A web worker is a Javascript script that runs on the background of a webpage. Javascript by default is single-threaded. One thread or the main thread executes all the javascript code for a webpage, one line at a time. A web worker is a separate javascript thread that allows individuals to execute multiple threads of javascript in parallel with each other. This helps offload any computationally expensive work or prevent the main thread from slowing down.

One major difference between the main thread and the web worker thread is that web workers cannot perform any DOM manipulation and do not have access to the global window methods. Web workers basically work like the network tab, where requests are sent and we receive a response.

web workers

Types of Web Workers

There are two primary types of Web Workers:

  • Shared Workers: These can be used by multiple scripts across different windows or tabs. They are useful in scenarios where you need a worker that can handle shared state across different parts of your app.

  • Service Workers: Primarily used for intercepting and handling network requests, they enable powerful features like offline capabilities and background sync for web applications.

Creating a Web Worker

Creating a Web Worker is straightforward. First, create a separate JavaScript file (e.g., worker.js) containing the worker's code. Then, use the Worker() constructor in your main script to create an instance of the worker.

//worker.js
// Listen for messages from the main script
onmessage = function (event) {
    let number = event.data;
    let sum = 0;

    // Perform a time-consuming task (sum of first 'n' numbers)
    for (let i = 1; i <= number; i++) {
        sum += i;
    }
    // Post the result back to the main thread
    postMessage(sum);
};

Communicating with Web Workers

Communication between the main thread and Web Workers occurs through messages. You can send data to a worker using the postMessage() method, and the worker can respond with its results using the same method. This communication mechanism ensures data integrity and security.

//main thread
// Create a new web worker
const worker = new Worker('worker.js');
// Listen for messages from the worker
worker.onmessage = function (event) {
    console.log('Message from worker: ', event.data);
    document.getElementById('result').textContent = 'Result: ' + event.data;
};
// Send a message to the worker
worker.postMessage(1000000); // Example task: calculate the sum of first 1,000,000 numbers

Terminating Web Workers

Once you no longer need a Web Worker, you can terminate it using the `terminate()` method. This frees up resources and prevents unnecessary processing. Terminating a worker will stop all its operations and any tasks it's currently running.

// main.js
worker.terminate(); // Terminates the worker

Limitations of Web Workers

While Web Workers offer significant benefits, they do have certain limitations:

  • No Access to the Global Window Object: Workers operate in a separate scope and cannot access the global window object or its properties (e.g., document, location).
  • No Access to DOM: Web Workers run in an isolated environment and don't have access to the DOM or any UI elements. Communication between the worker and the main thread is done via postMessage and event listeners, but you can't directly manipulate the DOM from a worker.

  • Limited Shared State: Since workers run on separate threads, sharing data between them requires serialization and deserialization of messages, which adds overhead. This means sharing large amounts of data between the worker and the main thread can be slow.

  • Browser Support: While most modern browsers support Web Workers, older versions may not, meaning you need to account for this in your app if you need to support legacy browsers.

  • Resource Overhead: Each Web Worker consumes system resources. Creating too many workers at once can lead to high memory usage, which can negatively impact performance.

Real-World Applications of Web Workers

Web Workers find applications in various scenarios, including:

  • Image Processing: Offloading computationally intensive image manipulation tasks to workers can significantly improve performance.
  • Data Analysis and Visualization: Processing large datasets and generating visualizations can be optimized using Web Workers.
  • Game Development: Workers can handle complex game logic, physics, and AI calculations without affecting the main thread's responsiveness.
  • Background Tasks: Performing background tasks, such as fetching data or processing files, can be delegated to workers to ensure a seamless user experience.

Conclusion

Web Workers are an essential tool for optimizing the performance of web applications. They enable you to run expensive tasks in the background without blocking the main thread, making sure that your app remains responsive and smooth. While they come with limitations—like not being able to access the DOM—they are a great solution for tasks like data processing, encryption, and real-time apps.

Like what you see? Share with a Friend

share this blog

Share

Share Post

logoA Guide to Understanding Web Workers


Facebook
X
Whatsapp
Telegram
Reddit
Linkedin
Instapaper
Pinterest
Email
QR Code
More..

4 Comments

3 Likes

Comments (4)

sort comments

Before you comment please read our community guidelines


Please Login or Register to comment

user profile avatarHide Comment

diamond degesh

Published on

I am also a web worker, i should get some credit

user profile avatarHide Comment

the don

Admin

Published on

web workers are cool

user profile avatarHide Comment

Tech Wizard

Author
Admin

Published on

Unfortunately not!

GIF

user profile avatarHide Comment

Tutor Juliet

Published on

If I work online, am I a web worker?