Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/faraasat/next-with-web-workers
Example code for article - Optimizing Your Next.js App By Offloading Compute-Intensive Tasks from Main Thread to Web Workers
https://github.com/faraasat/next-with-web-workers
hooks nextjs nextjs14 react vercel web-worker-react web-workers webworkers
Last synced: 1 day ago
JSON representation
Example code for article - Optimizing Your Next.js App By Offloading Compute-Intensive Tasks from Main Thread to Web Workers
- Host: GitHub
- URL: https://github.com/faraasat/next-with-web-workers
- Owner: faraasat
- Created: 2024-02-28T12:49:57.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-03-07T06:21:04.000Z (11 months ago)
- Last Synced: 2024-11-21T03:54:44.896Z (2 months ago)
- Topics: hooks, nextjs, nextjs14, react, vercel, web-worker-react, web-workers, webworkers
- Language: TypeScript
- Homepage: https://next-with-web-workers.vercel.app
- Size: 69.3 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Next with Web Workers
### This Example Code is a Part of an Article: Optimizing Your Next.js App By Offloading Compute-Intensive Tasks from Main Thread to Web Workers
##### Live Url (Web Worker): [Deployment](https://next-with-web-workers.vercel.app/)
##### Live Url (Slugish): [Deployment](https://next-with-web-workers.vercel.app/slugish)
##### Article Link: [Medium](https://faraasat.medium.com/optimizing-your-next-js-app-by-offloading-compute-intensive-tasks-from-main-thread-to-web-workers-bc2fe8e95a6d)
### The Challenge of Single-Threaded JavaScript Execution
JavaScript executed in our browsers inherently operates on a single thread, meaning that all code execution occurs within a single main thread. While this simplicity ensures predictable behavior, it also imposes limitations. Long-running tasks, such as complex computations, can block the main thread, leading to sluggish user experiences.### Introducing Web Workers
To address this issue, JavaScript provides a solution called Web Workers. These allow us to run scripts in background threads, separate from the main thread. Web Workers are a simple means for web content to execute scripts in parallel threads without interfering with the user interface. They enable us to:
- Execute arbitrary code.
- Make network calls using fetch.
- Communicate with the main thread via messages.
- Handle caching and push notifications.
- Access a subset of items available under the window object, such as WebSockets and IndexedDB.### Browser Support and Communication Channels
Most modern browsers, including Chrome, Safari, Firefox, and Edge, support Web Workers1. Establishing communication between the main thread and a worker thread involves using the postMessage() and onmessage methods. These allow sending and receiving messages between the two threads. Hereβs a simplified example:```Javascript
// Main thread
const worker = new Worker("./worker.js");
worker.postMessage({ start: 0, end: 100000 });
// Receiving the message back from the worker thread
worker.onmessage = (message) => {
console.log(message.data);
};
// Web Worker (worker.js)
self.onmessage = (message) => {
// Perform work (e.g., create an array)
const arr = [];
for (let i = message.data.start; i < message.data.end; i++) {
arr.push(i);
}
// Send the result back to the main thread
self.postMessage(arr);
};
```### Benefits and Considerations
By offloading compute-intensive tasks to Web Workers, you can significantly improve the responsiveness and overall performance of your Next.js applications. Keep in mind the following considerations:
- Browser Support: Most modern browsers support Web Workers, including Chrome, Safari, Firefox, and Edge.
- Communication Channels: Use postMessage() and onmessage to establish communication between the main thread and the worker thread.
- Task Selection: Identify tasks that can be parallelized and benefit from offloading to Web Workers.### Conclusion:
Remember, this approach allows you to harness the power of parallel execution without compromising the user experience. For detailed implementation examples and further insights, refer to the original article. Happy optimizing! π### Result:
![1_GILFWKlIHTkIQpkspaviYQ](https://github.com/faraasat/next-with-web-workers/assets/63093876/62d27d35-403a-4544-80dd-ca1537b11a56)