How to handle CPU-intensive tasks
Web workers make the application fast by running CPU-intensive tasks on a different thread other than the main thread.
Sorting, search, graph traversal, matrix multiply are all CPU operations, a process is CPU-intensive
or not it depends on how much and how frequent are their execution.
Web Workers are a simple means for web content to run scripts in background threads. The worker thread can perform tasks without interfering with the user interface.
Workerize-loader - a webpack loader that moves a module and its dependencies into a Web Worker, automatically reflecting exported functions as asynchronous proxies.
npm install -D workerize-loader
import {getItems} from '../workerized-expensive'
workerized-expensive.js
import makeItemsWorker from 'workerize!./expensive'
const {getItems} = makeItemsWorker()
export {getItems}
expensive.js is our function that may slow down an application.
If you're using Babel in your build, make sure you disabled commonJS transform. Otherwise, workerize-loader won't be able to retrieve the list of exported function from your worker script
import React from 'react'
import {getItems} from '../workerized-expensive'
import {useAsync} from '../utils'
const {data: allItems, run} = useAsync({data: [], status: 'pending'})
React.useEffect(() => {
run(getItems(inputValue))
}, [inputValue, run])
const items = allItems.slice()
Because working with web workers is asynchronous, you'll probably want to use the useAsync
Last updated
Was this helpful?