引出:
作为前端切图仔,在之前的工作中一直都是写后台,没机会用到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 |

最低0.47元/天 解锁文章
778

被折叠的 条评论
为什么被折叠?



