Help Angular by taking a 1 minute survey!Go to surveyHome

Using Web Workers with Angular CLI

Web Workers allow you to run CPU intensive computations in a background thread, freeing the main thread to update the user interface.

If you find your application becomes unresponsive while processing data, using Web Workers can help.

Adding a Web Worker

You can add a web worker anywhere in your application. If the file that contains your expensive computation is src/app/app.component.ts, you can add a Web Worker using ng generate web-worker app.

Running this command will:

  • configure your project to use Web Workers, if it isn't already.

  • add src/app/app.worker.ts with scaffolded code to receive messages:

    addEventListener('message', ({ data }) => { const response = `worker response to ${data}`; postMessage(response); });
          
          addEventListener('message', ({ data }) => {
      const response = `worker response to ${data}`;
      postMessage(response);
    });
        
  • add scaffolded code to src/app/app.component.ts to use the worker:

    if (typeof Worker !== 'undefined') { // Create a new const worker = new Worker('./app.worker', { type: 'module' }); worker.onmessage = ({ data }) => { console.log('page got message: $\{data\}'); }; worker.postMessage('hello'); } else { // Web Workers are not supported in this environment. // You should add a fallback so that your program still executes correctly. }
          
          if (typeof Worker !== 'undefined') {
      // Create a new
      const worker = new Worker('./app.worker', { type: 'module' });
      worker.onmessage = ({ data }) => {
        console.log('page got message: $\{data\}');
      };
      worker.postMessage('hello');
    } else {
      // Web Workers are not supported in this environment.
      // You should add a fallback so that your program still executes correctly.
    }
        

After the initial scaffolding, you will need to refactor your code to use the Web Worker by sending messages to and from.

Caveats

There are two important things to keep in mind when using Web Workers in Angular projects:

  • Some environments or platforms, like @angular/platform-server used in Server-side Rendering, don't support Web Workers. You have to provide a fallback mechanism to perform the computations that the worker would perform to ensure your application will work in these environments.
  • Running Angular itself in a Web Worker via @angular/platform-webworker is not yet supported in Angular CLI.