What's the difference between service workers and web workers in JavaScript?
Adam Rifkin stashed this in JavaScript
Stashed in: HTML5!, Mobile Web!
TL;DR
- Service Worker: Background service that handles network requests. Ideal for dealing with offline situations and background syncs or push notifications. Cannot directly interact with the DOM. Communication must go through the Service Worker’s
postMessage
method.- Web Worker: Mimics multithreading, allowing intensive scripts to be run in the background so they do not block other scripts from running. Ideal for keeping your UI responsive while also performing processor-intensive functions. Cannot directly interact with the DOM. Communication must go through the Web Worker’s
postMessage
method.- WebSocket: Creates an open connection between a client and a server, allowing persistent two-way communication over a single connection. Ideal for any situation where you currently use long-polling such as chat apps, online games, or sports tickers. Can directly interact with the DOM. Communication is handled through the WebSocket’s
send
method.
From Daksh Shah on Quora:
A web worker is a JavaScript script executed from an HTML page that runs in the background, independently of other user-interface scripts that may also have been executed from the same HTML page.
Service Workers are a new browser feature that provide event-driven scripts that run independently of web pages. Unlike other workers Service Workers can be shut down at the end of events, note the lack of retained references from documents, and they have access to domain-wide events such as network fetches.
ServiceWorkers also have scriptable caches. Along with the ability to respond to network requests from certain web pages via script, this provides a way for applications to "go offline".
Service Workers are meant to replace the (oft maligned) HTML5 Application Cache. Unlike AppCache, Service Workers are comprised of scriptable primitives that make it possible for application developers to build URL-friendly, always-available applications in a sane and layered way.
Source:
https://quora.com/Whats-the-difference-between-service-workers-and-web-workers-in-JavaScript
From Stack Overflow:
A service worker has additional functionality beyond what's available in shared workers, and it has a longer lifespan.
Service workers can respond to
message
events, like shared workers, but they also have access to additional events. Handlingfetch
events allows service workers to intercept any network traffic (originating from a controlled page) and take specific actions, including serving responses from aRequest
/Response
cache. There are also plans to expose apush
event to service workers, allowing web apps to receive push messages in the "background".The other major difference relates to the lifespan. Once a service worker is registered for a specific origin and scope, it stays registered indefinitely. (A service worker will automatically be updated if the underlying script changes, and it can be either manually or programmatically removed, but that's the exception.) Because a service worker is persistent, and has a life independent of the pages active in a web browser, it opens the door for things like using them to power the aforementioned push messaging—a service worker can be "woken up" and process a
push
event as long as the browser is running, regardless of which pages are active. Future web platform features are likely to take advantage of this persistence as well.There are other, technical differences, but from a higher-level view, those are what stand out.
Source:
http://stackoverflow.com/questions/28882289/service-worker-vs-shared-worker
6:52 PM Mar 21 2016