web worker 的使用

94 阅读1分钟

image.png

html

<!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>
  <h1>Web Worker Example</h1>
  <button id="startWorker">Start Worker</button>
  <p id="result">Result will appear here.</p>
  <script>
    // 检查浏览器是否支持 Web Worker
    if (window.Worker) {
      // 创建一个 Web Worker 实例,加载 worker.js
      const worker = new Worker('worker.js');
      document.getElementById('startWorker').addEventListener('click', () => {
        // 向 worker 发送数据(计算斐波那契数列的第 40 项)
        worker.postMessage({ num: 40 });
      });
      // 监听 worker 发回的数据
      worker.onmessage = function (event) {
        // 更新页面显示计算结果
        document.getElementById('result').textContent = `Fibonacci result: ${event.data.result}`;
      };
      // 错误处理
      worker.onerror = function (error) {
        console.error('Worker error:', error);
      };
    } else {
      console.log('Web Worker not supported in your browser.');
    }
  </script>
</body>
</html>

worker.js

// worker.js
self.onmessage = function (event) {
  // 接收到主线程的消息,event.data 是传入的数据
  const { num } = event.data;
  // 执行一些计算,比如计算斐波那契数列
  const result = fibonacci(num);
  // 将结果发回主线程
  self.postMessage({ result });
};

// 一个简单的递归函数来计算斐波那契数列
function fibonacci(n) {
  if (n <= 1) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}