Skip to content

Commit 2f23580

Browse files
committed
Showcase webworker usage
1 parent 7746bde commit 2f23580

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

next.config.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ const config = {
4848
path: false,
4949
};
5050
}
51-
useEsbuildMinify(config);
51+
//useEsbuildMinify(config);
5252
// We need this additional rule to make sure that mjs files are
5353
// correctly detected within our src/ folder
5454
config.module.rules.push({
5555
test: /\.m?js$/,
5656
// v-- currently using an experimental setting with esbuild-loader
57-
//use: options.defaultLoaders.babel,
58-
use: [{loader: 'esbuild-loader', options: { loader: 'jsx'}}],
57+
use: options.defaultLoaders.babel,
58+
//use: [{loader: 'esbuild-loader', options: { loader: 'jsx'}}],
5959
exclude: /node_modules/,
6060
type: "javascript/auto",
6161
resolve: {

pages/test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { useEffect, useRef, useCallback } from 'react'
2+
3+
export default function Index() {
4+
const workerRef = useRef()
5+
useEffect(() => {
6+
console.log(import.meta.url);
7+
workerRef.current = new Worker(new URL('../worker.js', import.meta.url))
8+
workerRef.current.onmessage = (evt) =>
9+
alert(`WebWorker Response => ${evt.data}`)
10+
return () => {
11+
workerRef.current.terminate()
12+
}
13+
}, [])
14+
15+
const handleWork = useCallback(async () => {
16+
workerRef.current.postMessage(100000)
17+
}, [])
18+
19+
return (
20+
<div>
21+
<p>Do work in a WebWorker!</p>
22+
<button onClick={handleWork}>Calculate PI</button>
23+
</div>
24+
)
25+
}

worker.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function pi(n) {
2+
var v = 0
3+
for (let i = 1; i <= n; i += 4) {
4+
// increment by 4
5+
v += 1 / i - 1 / (i + 2) // add the value of the series
6+
}
7+
return 4 * v // apply the factor at last
8+
}
9+
10+
addEventListener('message', (event) => {
11+
postMessage(pi(event.data))
12+
})

0 commit comments

Comments
 (0)