前端开启多线程,以及一般应用场景
javascript是单线程执行的,在处理运算过程中,浏览器不能执行其它javascript脚本,UI渲染线程也会被挂起,从而导致浏览器进入僵死状态。因此在做一些耗时比较大的运算时,需要我们开启一个新的线程执行运算脚本。
解决方案
Web Worker 是 HTML5 提供的一个javascript多线程解决方案,可以将一些大计算量的代码交由web Worker运行而不冻结用户界面
Web Worker特点
web worker有两个好处:快速、不阻塞浏览器响应
web worker不能操作DOM
应用场景
以计算斐波那契数列这类运算量大的计算为例,开启多线程,计算出结果。然后再进行主线程逻辑操作。
// worker.js
self.onmessage = function(event) {
const data = event.data;
const result = fib(data);
self.postMessage(result);
}
function fib(n) {
if(n == 1 || n == 2){
return 1;
}
return fib(n - 1) + fib(n - 2);
}
// 主线程
const worker = new Worker('./worker.js');
worker.postMessage(50);
let startTime = new Date().getTime();
console.log(`start: ${startTime}`);
worker.onmessage = function(event) {
const result = event.data;
// 处理数据
let endTime = new Date().getTime();
console.log('result:' + result, endTime);
console.log('time' + (endTime-startTime)/1000 + 's');
}