前端Worker 的应用
什么是Web Workers
Web Workers 是一种允许在后台线程中运行脚本的技术,这样可以将计算密集型任务从主线程分离出去,从而避免阻塞 UI 并提高页面的响应性。Web Workers 使得 Web 应用程序能够执行长时间运行的任务,而不会影响用户界面的性能。
如何使用Worker
1.创建 Worker
创建一个 Worker 的步骤如下:
1.创建 Worker 实例:通过 new Worker(url) 创建一个新的 Worker 实例,其中 url 是 Worker 脚本的路径。
2.监听 Worker 事件:监听 message 事件,以便接收来自 Worker 的消息。
3.发送消息给 Worker:通过 worker.postMessage(data) 向 Worker 发送消息。
4.Worker 脚本:在 Worker 脚本中监听 message 事件,处理消息,并通过 self.postMessage(data) 发送结果。:在 Worker 脚本中监听 message 事件,处理消息,并通过 self.postMessage(data) 发送结果。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Web Worker Example</title>
</head>
<body>
<button id="startButton">Start Calculation</button>
<div id="result"></div>
<script>
document.getElementById('startButton').addEventListener('click', function() {
// 创建 Worker 实例
const worker = new Worker('./worker.js');
// 监听 Worker 的 message 事件
worker.addEventListener('message', function(event) {
document.getElementById('result').innerText = event.data;
});
// 向 Worker 发送消息
worker.postMessage({ task: 'compute', value: 100 });
});
</script>
</body>
</html>
worker.js
self.addEventListener('message', function(event) {
const task = event.data.task;
const value = event.data.value;
if (task === 'compute') {
const result = cal(value);
self.postMessage(result);
}
});
function cal(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * cal(n - 1);
}