docs.rodeo

MDN Web Docs mirror

Web Workers API

{{DefaultAPISidebar("Web Workers API")}} 

Web Workers makes it possible to run a script operation in a background thread separate from the main execution thread of a web application. The advantage of this is that laborious processing can be performed in a separate thread, allowing the main (usually the UI) thread to run without being blocked/slowed down.

Concepts and usage

A worker is an object created using a constructor (e.g. {{DOMxRef("Worker.Worker", "Worker()")}} ) that runs a named JavaScript file — this file contains the code that will run in the worker thread.

In addition to the standard JavaScript set of functions (such as {{jsxref("String")}} , {{jsxref("Array")}} , {{jsxref("Object")}} , {{jsxref("JSON")}} , etc.), you can run almost any code you like inside a worker thread. There are some exceptions: for example, you can’t directly manipulate the DOM from inside a worker, or use some default methods and properties of the {{domxref("Window")}}  object. For information about the code that you can run see supported functions, and supported Web APIs.

Data is sent between workers and the main thread via a system of messages — both sides send their messages using the postMessage() method, and respond to messages via the onmessage event handler (the message is contained within the {{domxref("Worker/message_event", "message")}}  event’s data property). The data is copied rather than shared.

Workers may in turn spawn new workers, as long as those workers are hosted within the same {{glossary("origin")}}  as the parent page.

In addition, workers can make network requests using the {{domxref("WorkerGlobalScope/fetch", "fetch()")}}  or {{domxref("XMLHttpRequest")}}  APIs (although note that the {{domxref("XMLHttpRequest.responseXML", "responseXML")}}  attribute of XMLHttpRequest will always be null).

Worker types

There are a number of different types of workers:

Worker contexts

While {{domxref("Window")}}  is not directly available to workers, many of the same methods are defined in a shared mixin (WindowOrWorkerGlobalScope), and made available to workers through their own {{domxref("WorkerGlobalScope")}} -derived contexts:

Interfaces

Examples

We have created a couple of demos to show web worker usage:

You can find out more information on how these demos work in Using Web Workers.

Specifications

{{Specifications}} 

See also

In this article

View on MDN