Boosting performance with JavaScript workers
JavaScript is a single-threaded environment. So, multiple scripts cannot really run simultaneously. Yes, we use setTimeout()
, setInterval()
, XMLHttpRequest
and event handlers to run tasks asynchronously. So we gain non-blocking execution, but this doesn't mean concurrency. However, using web workers, we can run one or more scripts in the background independent of the UI scripts. Web workers are long running scripts that are not interrupted by blocking UI events. Web workers utilize multithreading, so we can benefit from multicore CPUs.
Well, where can we use web workers? Anywhere where we do processor-intensive calculations and don't want them blocking the UI thread. It can be graphics, web games, crypto, and Web I/O. We cannot manipulate the DOM from a web worker directly, but we have access to XMLHttpRequest
, Web Storage, IndexedDB, FileSystem API, Web Sockets and other features.
So let's see what these web workers are in practice...