首先

需要在webpack.config.js中配置worker-loader;
如果没找到webpack.config.js这个文件,我们可以使用npm run eject来讲webpack的文件暴露出来,但是一经暴露,无法还原。

npm run eject

**Note: this is a one-way operation. Once youeject, you can't go back!**
我们需要先下载loader

npm i worker-loader

在webpack.config.js中使用:

 rules: [{test: /\.worker\.js$/,use: [{loader: 'worker-loader',},{ loader: 'babel-loader' }]// 增加es6 转换语法},......]

大概就在这个文件的340行位置。

使用worker

我们使用的时候需要woeker文件以xxx.worker.js结尾:
如:
file.worker.js
file.worker.js内容:

onmessage = function (e) {//监听主进程的消息const {data1,data2} =e.dataconsole.time("开始计算")const DIFF = require('diff')let DiffLeft = DIFF.diffLines(data1, data2)console.timeEnd("开始计算")postMessage({ DiffLeft, DiffRight: DiffLeft})//向主进程发送消息
}

在A组件中引入:

import React, { useEffect, useState } from 'react'
import Worker from './file.worker.js'

使用:

  const [workerObj1, setWorkerObj1] = useState({})useEffect(() => {const myWorker = new Worker();setWorkerObj1(myWorker)}, [])//点击事件:const workerFun = () => {//向子进程发送消息workerObj1.postMessage(JSONObj.data)workerObj1.onmessage = function (e) {//执行这个函数说明已经收到了worker线程的消息console.log(e.data,'完成')setcontextBoxLoading(false)const { DiffLeft,DiffRight } = e.datasetoldStr(DiffLeft)setnewStr(DiffRight)workerObj1.terminate()}}

我们可以创建多个worker线程,每个线程做自己的事情,适合做大量的运算。
在worker线程做大量运算不会造成主线程渲染或者执行其他js失败,不会造成页面卡顿或者无响应。

React中使用worker线程相关推荐

  1. 深入理解 Node.js 中的 Worker 线程

    多年以来,Node.js 都不是实现高 CPU 密集型应用的最佳选择,这主要就是因为 JavaScript 的单线程.作为对此问题的解决方案,Node.js v10.5.0 通过 worker_thr ...

  2. React中的合成事件

    React中的合成事件 React自己实现了一套高效的事件注册.存储.分发和重用逻辑,在DOM事件体系基础上做了很大改进,减少了内存消耗,简化了事件逻辑,并最大程度地解决了IE等浏览器的不兼容问题. ...

  3. react中纯函数_如何在纯React中创建电子邮件芯片

    react中纯函数 by Andreas Remdt 由Andreas Remdt 如何在纯React中创建电子邮件芯片 (How to create email chips in pure Reac ...

  4. 为什么重新new两个线程线程号相同_C++ 20中的新线程(jthread)功能

    C++ 20带来了许多很酷的新功能,其中一个我将在这里简单介绍一下:std::jthread. 这个的实现std::jthread基于已经存在的std::thread.它基本上是一个包装器,它为线程带 ...

  5. python多线程没用_为什么我无法在python中加入该线程?

    我正在编写一个多线程类.该类具有parallel_process()函数,该函数被并行任务覆盖.要处理的数据放入队列中.每个线程中的worker()函数一直调用parallel_process(),直 ...

  6. java中等待所有线程都执行结束

    使用CountDownLatch,这其实是最优雅的写法了,每个线程完成后都去将计数器减一,最后完成时再来唤醒 @Test public void testThreadSync3() { final V ...

  7. 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决

    今天在调试程序中发现了程序中出现的一个问题,具体如下: 在对话框中新建一个线程worker thread,当用户点击cancel时,通知该线程函数退出,同时用WaitForSingleObject等待 ...

  8. 如何使 React 中的 useEffect、useLayoutEffect 只调用一次

    如何使 React 中的 useEffect.useLayoutEffect 只调用一次   Hook 是 React 16.8 的新增特性,旨在替代原来 React 中的 Class 组件.Reac ...

  9. C#中的多线程-线程同步基础 (控制线程数量)

    同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成 锁系统 构成 目的 跨进程? 速度 loc ...

  10. netty worker线程数量_Dubbo线程模型

    Dubbo中线程池的应用还是比较广泛的,按照consumer端到provider的RPC的方向来看,consumer端的应用业务线程到netty线程.consuemr端dubbo业务线程池,到prov ...

最新文章

  1. nginx+lua实现上传文件到OSS
  2. icinga的idoutils插件
  3. 如何在Python中获取字符串的子字符串?
  4. php json字符串返回false,php – json_encode()返回false
  5. elasticsearch7.x源码编译
  6. java数据结构编程_Java数据结构编程
  7. GitHub轻松阅读微服务实战项目流程详解【第一天:数据库表设计及其环境搭建、项目运行】
  8. 《Outlook时间整理术》一创建和使用自己的文件夹结构
  9. STL 源码剖析 空间配置器
  10. 住建部副部长:“限购”政策迟早要退出
  11. python调用nacos账号密码_python-nacos-sdk
  12. 今日恐慌与贪婪指数为75 贪婪程度有所上升
  13. JVM(四)—一道面试题搞懂JVM类加载机制
  14. 关于无线网络中几个名词WPS,PSK,WPA,WPA2等名词的解释以及WPA的破解
  15. Windows系统win10系统磁力种子文件下载软件推荐
  16. 分块上(下)三角矩阵的行列式
  17. win7命令更新补丁
  18. 搬砖试金石!github星标7W算法刷题宝典,还愁拿不下大厂offer?
  19. 以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。给出队满条件和相应的如对和出队算法。
  20. Nordic芯片怎样烧录UICR

热门文章

  1. 豪斯多夫(Hausdorff)距离
  2. 探索变量之间的关系(python3)
  3. 电脑手机css自适应,怎么把一个pc页面自适应手机屏幕
  4. 零基础能学大数据吗 需要知道什么核心知识
  5. 利用ptrace设计一个简单的debugger调试器
  6. Flume错误:Flume:Class path contains multiple SLF4J bindings
  7. oracle 虚拟机安装mac os,【Mac OS X 详细安裝教程图解之虚拟机安装】-Oracle论坛-ZOL中关村在线...
  8. com.homelink.android,链家-新房二手房租房
  9. 计算机英语教程作文,如何写好话题作文
  10. 解决微信开发工具卡顿的问题