Web Worker使用

web worker是什么?

Web Workers 是 HTML5 中的一项技术,它允许你在浏览器中创建多线程 JavaScript 的一种方式。通常,JavaScript 在浏览器中是单线程执行的,这意味着所有的任务都是按顺序执行的,如果有一个任务需要执行很长时间,那么会导致页面变得不响应,用户体验下降。Web Workers 的出现解决了这个问题,它允许你在后台运行 JavaScript 代码,而不会影响到页面的主线程,从而提高了页面的响应性能。

使用场景

  • 复杂的计算任务:例如数学运算、图像处理、视频处理等。
  • 大规模数据处理:对大型数据集进行排序、过滤、搜索等操作时,使用 Web Workers 可以加速这些操作,而不会影响用户界面的响应性能。
  • 后台数据同步和处理:例如电子商务网站中使用 Web Workers 来处理用户的购物车操作。
  • 文件操作:对大型文件进行读取、解析、处理等操作时,例如在前端进行文件上传和处理时,可以使用 Web Workers 来异步处理文件的读取和解析,以及生成文件预览或者进行文件压缩等操作。

如何使用

javascript 复制代码
// 模拟生成大数据
function generateData() {
  var data = [];
  for (var i = 0; i < 10000000; i++) {
    var item = {
      id: i,
      value: Math.random() * 100
    };
    data.push(item);
  }
  return data;
}

// 检测函数执行的时间
function getTime(fn) {
  // 在函数开始处获取开始时间
  const startTime = performance.now();
  fn();
  // 在函数结束处获取结束时间
  const endTime = performance.now();
  // 输出执行时间
  console.log(endTime - startTime);
}

首先来看平常的数据执行

javascript 复制代码
getTime(generateData)  //  283.19999998807907

属于实打实的在浏览器中执行了283ms,但凡数据生成的复杂一些,量多一些,时间都是难以接受的。

来看运用web worker

javascript 复制代码
// worker.js 文件
self.onmessage = function(event) {
  var result = generateData();
  self.postMessage(result);
};
javascript 复制代码
function workersGenerateData(){
  var worker = new Worker('worker.js');
  worker.postMessage('start');
  worker.onmessage = function(event) {
    console.log('Processed');
  };
}
javascript 复制代码
getTime(workersGenerateData) // 0.09999996423721313
相关推荐
怕浪猫25 分钟前
给AI配一台电脑,开源版Muse来了,OpenMuse赶紧去二次开发吧
javascript·面试·github
Jack N37 分钟前
【Strapi 系列之二】Collection / Single / Component 怎么选?Strapi 字段大全一篇讲透
前端·javascript·strapi
郑州光合科技余经理1 小时前
本地生活服务系统:预约状态和进度通知接口怎么拆
java·开发语言·前端·javascript·后端·php·生活
半个落月10 小时前
LangSmith 全链路观测(下):用 Dataset 与 LLM Judge 量化评估 RA
javascript·langchain
半个落月11 小时前
LangSmith 全链路观测(上):用 LangGraph 与 Milvus 构建可追踪的 RAG 客服
javascript·langchain
半个落月11 小时前
LangChain.js Agent 中间件实战:生命周期、动态工具与文件权限
javascript·langchain
志尊宝13 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
bmxy小明同学18 小时前
2026-10-11-幻觉治理
服务器·前端·javascript
m0_5873830019 小时前
无人自助拼豆系统落地开发实战指南 核心逻辑实现与部署经验分享
前端·javascript·vue.js·人工智能·经验分享·需求分析
zhaiyy19 小时前
HTML Popover API 实践
前端·javascript·html