当前位置: 首页 > wzjs >正文

深圳市做网站的国际新闻最近新闻军事

深圳市做网站的,国际新闻最近新闻军事,做网站创业故事,做wordpress模板赚钱文章目录 前言基础使用高级特性 使用 ES Modules实际应用场景图像处理大数据处理轮询任务 性能优化技巧现代开发方式使用 worker-loader (Webpack) Vite中的Worker使用 限制与注意事项DOM限制:通信限制:同源策略:最佳实践 前言 Web Workers 是浏览器提供的 JavaScript 多线程解…

文章目录

  • 前言
    • 基础使用
    • 高级特性
  • 使用 ES Modules
    • 实际应用场景
      • 图像处理
      • 大数据处理
      • 轮询任务
    • 性能优化技巧
    • 现代开发方式
      • 使用 worker-loader (Webpack)
    • Vite中的Worker使用
  • 限制与注意事项
    • DOM限制:
    • 通信限制:
    • 同源策略:
      • 最佳实践


前言

Web Workers 是浏览器提供的 JavaScript 多线程解决方案,允许在后台线程中运行脚本,避免阻塞主线程。

基础使用

创建 Worker// 主线程代码
const worker = new Worker('worker.js');// worker.js (Worker线程)
self.onmessage = function(e) {console.log('收到主线程消息:', e.data);postMessage('Worker已收到消息');
};

线程间通信

主线程发送消息:

worker.postMessage({ type: 'start', data: 42 });Worker线程接收消息:
// worker.js
self.onmessage = function(e) {if (e.data.type === 'start') {const result = heavyCalculation(e.data.data);postMessage({ result });
};

高级特性

错误处理

worker.onerror = function(error) {console.error('Worker错误:', error);
};

终止 Worker

// 主线程
worker.terminate();

// Worker线程

self.close();

使用 ES Modules

// 主线程
const worker = new Worker('worker.js', { type: 'module' });
// worker.js
import { heavyTask } from './utils.js';self.onmessage = async (e) => {const result = await heavyTask(e.data);postMessage(result);
};

实际应用场景

图像处理

// 主线程
const imageWorker = new Worker('image-processor.js');
imageWorker.postMessage({ imageData });// image-processor.js
self.onmessage = function(e) {const processed = applyFilters(e.data.imageData);postMessage(processed);
};

大数据处理

// 主线程
const dataWorker = new Worker('data-processor.js');
dataWorker.postMessage(largeDataset);dataWorker.onmessage = function(e) {updateUI(e.data.results);
};

轮询任务

// worker.js
function poll() {fetch('/api/status').then(res => res.json()).then(data => {postMessage(data);setTimeout(poll, 5000);});
self.onmessage = function(e) {if (e.data === 'start') poll();
};

性能优化技巧

批量传输数据:

      // 使用Transferable对象提高性能const buffer = new ArrayBuffer(32);worker.postMessage(buffer, [buffer]);

Worker复用:

      // 创建可复用的Worker池class WorkerPool {constructor(size, workerScript) {this.pool = Array(size).fill().map(() => new Worker(workerScript));
}

懒加载Worker:

      let worker;function getWorker() {if (!worker) {worker = new Worker('worker.js');
return worker;

现代开发方式

使用 worker-loader (Webpack)

// webpack.config.js
module.exports = {module: {rules: [
test: /\.worker\.js$/,use: { loader: 'worker-loader' }
]};
// 使用
import Worker from './my.worker.js';
const worker = new Worker();

Vite中的Worker使用

// 直接导入为Worker
import Worker from './worker.js?worker';const worker = new Worker();

Comlink 简化通信

// 主线程
import * as Comlink from 'comlink';
const worker = new Worker('worker.js');
const api = Comlink.wrap(worker);
// worker.js
import * as Comlink from 'comlink';
const api = {async heavyTask(param) {// 长时间任务
};Comlink.expose(api);

限制与注意事项

DOM限制:

  • Worker无法直接访问DOM

  • 不能使用window、document等对象

通信限制:

  • 传递的数据会被复制(结构化克隆算法)

  • 无法传递函数、DOM元素等

同源策略:

Worker脚本必须与主线程同源
调试技巧:

Chrome开发者工具 → Sources → Worker调试

使用console.log调试Worker

最佳实践

合理使用Transferable:

      // 传递大型二进制数据const canvas = document.querySelector('canvas');const offscreen = canvas.transferControlToOffscreen();worker.postMessage({ canvas: offscreen }, [offscreen]);

错误恢复机制:

      worker.onerror = function() {// 重启Worker或降级处理initializeWorker();};

优雅终止:

      function terminateWorker(worker) {worker.postMessage('terminate');setTimeout(() => {if (worker) worker.terminate();}, 1000);

版本控制:

      // Worker文件名加入版本号const worker = new Worker(`worker.v2.js?${CACHE_BUST}`);

Web Workers为CPU密集型任务提供了完美的解决方案,合理使用可以显著提升Web应用的性能和用户体验。


文章转载自:

http://9mbogyxg.qnsmk.cn
http://f4qRIptL.qnsmk.cn
http://TqJzKrma.qnsmk.cn
http://4LF2YBiU.qnsmk.cn
http://itPooJlx.qnsmk.cn
http://ktRyelDR.qnsmk.cn
http://vOESboEv.qnsmk.cn
http://GAClTs16.qnsmk.cn
http://K8F0C1B5.qnsmk.cn
http://kKyN6dhD.qnsmk.cn
http://sQ7NmZtO.qnsmk.cn
http://1GOD2VXr.qnsmk.cn
http://7Vev72wL.qnsmk.cn
http://N1lBBf9W.qnsmk.cn
http://UhzHKIx9.qnsmk.cn
http://curX5vXc.qnsmk.cn
http://jvd95bhF.qnsmk.cn
http://GGHMGngj.qnsmk.cn
http://y8uWEKuA.qnsmk.cn
http://3ij8ECg6.qnsmk.cn
http://sjJ462P5.qnsmk.cn
http://wGJrh5Dw.qnsmk.cn
http://wWleQptA.qnsmk.cn
http://YGwjUIYw.qnsmk.cn
http://vRs7mAcG.qnsmk.cn
http://LEvOZvWn.qnsmk.cn
http://CbLuTpaX.qnsmk.cn
http://oB6rTXv9.qnsmk.cn
http://4M1138Gg.qnsmk.cn
http://ViPNoh3p.qnsmk.cn
http://www.dtcms.com/wzjs/732956.html

相关文章:

  • 网站设计师是什么部门建站网站那个好
  • 网站建设方案范文2000字中国兰州网pc主站
  • seo建站网站架构建设方案
  • 网站建设设计图片找权重高的网站方法
  • 即墨公司做网站电脑版商城网站建设
  • 站群推广有哪些方式网站开发技术与应用课程设计
  • 做网站的软件有些什么wordpress悬浮客户
  • 营销智库网站宝安中心医院口腔科电话
  • 查询企业信息的网站个人网页设计作品及设计理念
  • 网站做服装那个平台好一点普陀建设机械网站
  • 个人公众号怎么运营杭州seo代理公司
  • 化妆品电子商务网站建设策划书网站访问量统计怎么做
  • 自己做的网站能上传到凡科吗东营网格通下载安装包
  • 国外免费空间建网站wordpress 文件存储
  • 深圳网站建设价钱程建网
  • 网站建设卩金手指科杰建立网站ftp是什么
  • 济南做网站软件夸网站做的好怎么夸
  • 最好的购物平台排行榜深圳网站设计专家乐云seo品牌
  • 自己做的网址危险网站wordpress去除相册样式
  • 洛阳网站建设内容素马杭州网站设计介绍
  • 有没有能帮人快速网站备案的机构如何分析网站关键词
  • 厦门做网站xm37互联网推广员是做什么的
  • 小游戏网站开发北京东城区 网站建设
  • 做网站要准备的资料祁东seo公司
  • 新网站建设怎么样动感地带套餐
  • 上海配资网站开发idc网站备案
  • 网站怎么做才会有收录做网站建设的公司
  • 重庆网站模板制作协会建设网站的目的
  • 佛山建网站的公司wordpress主题网址导航葬爱
  • 个人接单做网站挣钱不dedecms中餐网站模板