Web Worker 入门:让前端应用多线程化

引出:

作为前端切图仔,在之前的工作中一直都是写后台,没机会用到web Worker,传统的性能优化web Worker用到的场景也很少,毕竟大量的数据计算一般直接给后端去做就行,轮不到前端来考虑(没遇到类似的场景),那为什么要学习web Worker呢?现在的部门是做AIGC相关的,就在想前端能不能也实现一些ai模型检测功能,扩展开之后发现了前端可以使用TensorFlow.js ,WebDNN等实现一些简单的模型算法,模型的运行就需要单独一个线程来跑,不能影响主线程,所以就使用到了web worker.

1、web worker概述

什么是web worker?

Web Workers 是 HTML5 提供的一种在后台线程中运行脚本的机制。它允许 JavaScript 在主线程之外创建一个或多个独立的后台线程,这些线程可以执行脚本而不会阻塞主线程。

主线程和 Web Workers 线程之间通过消息传递来进行通信。消息传递是基于事件机制的,通过postMessage()方法发送消息,通过onmessage事件来接收消息。

web worker使用场景有哪些?

1、数据处理与计算

数据处理:Excel类应用的数据处理,日志分析,数据统计和聚合,CSV/JSON大文件处理

复杂计算:科学计算,3D渲染计算,金融数据分析,图形处理算法

2、媒体处理

图像处理: 图片批量处理,实时图像滤镜,图片压缩,图像特效处理

音视频处理:音视频转码,音频分析,视频帧提取,实时音频处理

3、前端AI和机器学习

图像分类 ,自然语言处理,推荐系统,异常检测

4、加密和安全

文件加密,密码哈希,数字签名,安全通信

web worker使用注意点:

不是所有的任务都适合使用worker

需要考虑任务的计算密度

评估数据传输成本

内存管理:及时释放不需要的资源,避免内存泄露。控制worker数量


2、实现一个最简单的web worker
```vue // 主线程代码 main.js const worker = new Worker('worker.js');

// 发送消息到 Worker
worker.postMessage({ type: ‘START’, data: largeArray });

// 接收 Worker 消息
worker.onmessage = function(e) {
console.log(‘Worker 返回结果:’, e.data);
};


```vue
// worker.js  worker线程代码
self.onmessage = function(e) {
  const { type, data } = e.data;
  if (type === 'START') {
    const result = processData(data);
    self.postMessage(result);
  }
};

web worker是通过构造函数的形式来实现,通过new 一个 Worker函数,就创建了worker。

构造函数Worker()接受两个参数

const worker = new Worker(path, options);
参数 解释
path 有效的js脚本的地址,必须遵守同源策略。无效的js地址或者违反同源策略,会抛出<font style="color:rgb(0, 0, 0);">SECURITY_ERR </font>类型错误
options.type 可选,用以指定 worker 类型。该值可以是 <font style="color:rgb(0, 0, 0);">classic&l
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十九万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值