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.
A worker is an object created using a constructor (e.g.
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
window object. For information about the code that you can run see worker global context and functions, and supported web APIs below.
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
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 origin as the parent page. In addition, workers may use
XMLHttpRequest for network I/O, with the exception that the
channel attributes on
XMLHttpRequest always return
There are a number of different types of workers:
- Dedicated workers are workers that are utilized by a single script. This context is represented by a
Shared workers are workers that can be utilized by multiple scripts running in different windows, IFrames, etc., as long as they are in the same domain as the worker. They are a little more complex than dedicated workers — scripts must communicate via an active port.
Service Workers essentially act as proxy servers that sit between web applications, the browser, and the network (when available). They are intended, among other things, to enable the creation of effective offline experiences, intercept network requests and take appropriate action based on whether the network is available, and update assets residing on the server. They will also allow access to push notifications and background sync APIs.
Workers run in a different global context than the current
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
Some of the functions (a subset) that are common to all workers and to the main thread (from
The following functions are only available to workers:
Note: If a listed API is supported by a platform in a particular version, then it can generally be assumed to be available in web workers. You can also test support for a particular object/function using the site: https://worker-playground.glitch.me/
The following Web APIs are available to workers:
Workers can also spawn other workers, so these APIs are also available:
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.