首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在react app中使用 web worker的方案,基于 creat-react-app脚手架,并且webapck 为 5.x

在react app中使用 web worker的方案,基于 creat-react-app脚手架,并且webapck 为 5.x

作者头像
拿我格子衫来
发布2024-12-28 10:29:11
发布2024-12-28 10:29:11
2670
举报
文章被收录于专栏:TopFETopFE

在src目录下创建 gcode.worker.js 文件

代码语言:javascript
复制
// 禁用eslint
console.log("Worker 脚本已加载");

/* eslint-disable */
self.onmessage = function (event) {
  const { task, data } = event.data;
  console.log(task, "task");
  if (task === "heavyComputation") {
    const result = heavyComputation(data);
    self.postMessage(result);
  }
};

function heavyComputation(data) {
  let sum = 0;
  for (let i = 0; i < data.length; i++) {
    sum += data[i] * data[i];
    console.log(sum, "sum");
  }
  return sum;
}

改写 App.tsx

代码语言:javascript
复制
import React, { useEffect, useState } from "react";

function App() {
  const [result, setResult] = useState(null);

  useEffect(() => {
    const worker = new Worker(new URL("./gcode.worker.js", import.meta.url));

    worker.onmessage = (event: any) => {
      console.log("从 Worker 收到的结果:", event.data);
      setResult(event.data);
    };

    const largeArray = Array.from({ length: 10000 }, () => Math.floor(Math.random() * 100));

    console.log("发送给 Worker 的数据:", largeArray);
    worker.postMessage({ task: "heavyComputation", data: largeArray });

    return () => {
      worker.terminate();
    };
  }, []);

  return (
    <div className="App">
      <h1>React Web Worker 示例</h1>
      <p>计算结果:{result !== null ? result : "计算中..."}</p>
      <p>主线程未被阻塞,页面依然可以正常操作!</p>
    </div>
  );
}

export default App;

效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档