B站视频 git完整代码
之前遇到的场景
1、vxe表格计算1000多条数极值/算数平方根的时候。
2、大文件上传时计算hashCode时候
一、不使用webWorker
目录结构
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
console.log('开始执行了')
console.time('总的执行时间')
function fb(n) {
if (n == 1 || n == 2) {
return 1;
}
return fb(n - 1) + fb(n - 2);
}
console.time("fb执行时间2");
var result = fb(43);
console.timeEnd("fb执行时间2");
function fb2(n) {
if (n == 1 || n == 2) {
return 1;
}
return fb2(n - 1) + fb2(n - 2);
}
console.time("fb执行时间2");
var result = fb2(43);
console.timeEnd("fb执行时间2");
function fb2(n) {
if (n == 1 || n == 2) {
return 1;
}
return fb2(n - 1) + fb2(n - 2);
}
console.time("fb执行时间2");
var result = fb2(43);
console.timeEnd("fb执行时间2");
console.timeEnd('总的执行时间')
console.log('执行结束了')
</script>
</body>
</html>
运行结果
二、使用webWorker
目录结构
test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width= , initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
var worker1 = new Worker("worker.js");
var worker2 = new Worker("worker2.js");
var worker3 = new Worker("worker3.js");
worker1.onmessage = (e) => {
console.log(e.data);
};
worker2.onmessage = (e) => {
console.log(e.data);
};
worker3.onmessage = (e) => {
console.log(e.data);
};
</script>
</body>
</html>
worker.js
// 斐波那契数列,模拟一个很耗时的计算过程
function fb(n) {
if (n == 1 || n == 2) {
return 1;
}
return fb(n - 1) + fb(n - 2);
}
console.time("fb执行时间1");
var result = fb(43);
console.timeEnd("fb执行时间1");
self.postMessage("worker");
// 在worker里self相当于global/window全局变量
worker2.js
// 斐波那契数列,模拟一个很耗时的计算过程
function fb(n) {
if (n == 1 || n == 2) {
return 1;
}
return fb(n - 1) + fb(n - 2);
}
console.time("fb执行时间2");
var result = fb(43);
console.timeEnd("fb执行时间2");
self.postMessage("worker2");
// 在worker里self相当于global/window全局变量
worker3.js
// 斐波那契数列,模拟一个很耗时的计算过程
function fb(n) {
if (n == 1 || n == 2) {
return 1;
}
return fb(n - 1) + fb(n - 2);
}
console.time("fb执行时间3");
var result = fb(43);
console.timeEnd("fb执行时间3");
self.postMessage("worker3");
// 在worker里self相当于global/window全局变量
运行结果在终端输入live-server(提前安装live-server: npm install live-serve -g)
页面如下
点击test.html,等待5秒左右就看到了
耗时比不开启webworker的要快三倍,是因为这里开启了三个webWorker,如果你电脑是2核的估计就体验不到了
右击电脑的固定栏
点击任务管理器
选择性能,这就是电脑的内核数。