This chapter introduces how to configure and use Web Workers in Rsbuild project.
Web Workers are a type of JavaScript program that runs in the background, independently of other scripts, without affecting the performance of the page. This makes it possible to run long-running scripts, such as ones that handle complex calculations or access remote resources, without blocking the user interface or other scripts. Web workers provide an easy way to run tasks in the background and improve the overall performance of web applications.
Rspack provides built-in support for Web Workers, which means you can use Web Workers directly in Rsbuild projects without needing any Loaders.
For example, create a file called worker.js
:
Then use this worker in the main thread:
Rspack supports multiple Worker syntaxes by default. See Rspack - Web Workers for more information.
If your project already uses worker-loader
, or you want to use the inline
and other features provided by worker-loader
, you can use worker-rspack-loader as an alternative to worker-loader
in Rsbuild projects.
When using worker-rspack-loader
, you need to use import
to load the Web Worker file, instead of new Worker('/path/to/worker.js')
.
worker-loader
is no longer maintained. If you don't need to inline Web Workers, we recommend using thenew Worker()
syntax.
By default, the worker script will be emitted as a separate chunk. This script supports uploading to CDN, but must obey the same-origin policy.
If you want your worker scripts to be accessible across domains, a common solution is to load them via importScripts (not subject to CORS). You can refer to the following code:
For detailed discussions on cross-domain issues, please refer to Discussions - webpack 5 web worker support for CORS?
Rsbuild supports standalone building of Web Workers bundles. When you need to configure independent build options for Web Workers or provide Web Workers for use by other applications, you can use the following methods.
Set Rsbuild's output.target configuration option to 'web-worker'
to generate build artifacts that run in Worker threads.
Use environments to build both Web Workers and the main application simultaneously: