面试题答案
一键面试初始化Web Worker处理累加和任务
- 创建Web Worker文件:
- 在项目中创建一个新的JavaScript文件,例如
worker.js
。 - 在
worker.js
中编写计算逻辑:
self.onmessage = function (event) { let sum = 0; for (let i = 1; i <= 1000000; i++) { sum += i; } self.postMessage(sum); };
- 在项目中创建一个新的JavaScript文件,例如
- 在React组件中使用Web Worker:
- 在React组件中引入和初始化Web Worker:
import React, { useEffect } from'react'; const App = () => { useEffect(() => { const worker = new Worker(new URL('./worker.js', import.meta.url)); worker.onmessage = function (event) { console.log('计算结果:', event.data); }; worker.postMessage(); return () => { worker.terminate(); }; }, []); return ( <div> <h1>Web Worker示例</h1> </div> ); }; export default App;
Web Worker与主线程之间的通信
- 主线程向Web Worker发送消息:
- 在主线程中,使用
worker.postMessage()
方法向Web Worker发送数据。例如在上述React组件中worker.postMessage();
,这里虽然没有传递具体数据,但也可以传递参数,如worker.postMessage({start: 1, end: 1000000});
。
- 在主线程中,使用
- Web Worker向主线程发送消息:
- 在Web Worker中,使用
self.postMessage()
方法向主线程发送数据。如worker.js
中self.postMessage(sum);
将计算结果发送回主线程。
- 在Web Worker中,使用
- 监听消息:
- 在主线程中,通过
worker.onmessage
事件监听Web Worker发送过来的消息,如worker.onmessage = function (event) { console.log('计算结果:', event.data); };
。 - 在Web Worker中,通过
self.onmessage
事件监听主线程发送过来的消息,如self.onmessage = function (event) { /* 处理消息 */ };
。
- 在主线程中,通过