JavaScript Web Workers
JavaScript Web Workers
// worker.js
self.onmessage = function(event) {
console.log("Message received from main thread:", event.data);
let result = event.data * 2; // Example computation
self.postMessage(result);
};
Step 2: Use the Worker in the Main Script
// main.js
const worker = new Worker('worker.js');
worker.onmessage = function(event) {
console.log("Message from Worker:", event.data);
};
worker.onerror = function(error) {
console.error("Worker error:", error);
};
Terminating a Worker
To stop a worker manually:
worker.terminate();
Inside the worker script, use:
self.close();
Using Shared Workers
Shared workers allow multiple scripts (even across different browser tabs) to share a single worker.
// sharedWorker.js
self.onconnect = function(event) {
const port = event.ports[0];
port.onmessage = function(event) {
console.log("Shared Worker received:", event.data);
port.postMessage("Hello from Shared Worker");
};
};
Using a Shared Worker in the Main Script
const sharedWorker = new SharedWorker("sharedWorker.js");
sharedWorker.port.start();
sharedWorker.port.postMessage("Hello Worker");
sharedWorker.port.onmessage = function(event) {
console.log("Received from worker:", event.data);
};
Service Workers (For Background Tasks & Caching)
Service Workers handle caching, background sync, and push notifications.
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(reg => console.log("Service Worker registered", reg))
.catch(err => console.error("Service Worker registration failed", err));
}
Service Worker Script (sw.js)