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