一、简要介绍
1.worker使得JS可以多线程运行,但是在worker不能操作dom,也没有window对象,不能操作本地文件,仅仅可以发送ajax以及计算。
2.主线程和worker线程之间的数据交互是采用onmessage和postmessage。
3.主线程结束worker的方式是worker.terminate(),自己结束的是this.close().
二、实例使用
<script>
console.log("-----------");
console.log("-----------");
console.log("-----------");
console.log("-----------");
const a = 12345678;
let res = 0;
for(let i=0;i<a;i++){
res+=i;
}
console.log(res);
console.log("-----------");
console.log("-----------");
console.log("-----------");
console.log("-----------");
console.log("-----------");
</script>
分析:由于js是多线程的,所以说如果下面的横线需要打印输出,必须要等待计算结束。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1441049/1624264485669-f47e3a87-c9e2-48ff-8f0c-377c0c863fba.png#clientId=u8f9fab5f-9e99-4&from=paste&id=u4fdabf7f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=264&originWidth=987&originalType=binary&ratio=2&size=15099&status=done&style=none&taskId=u53640b7b-30cd-47dd-9d09-3ebe5172a57)
这里引入worker
<script>
console.log("-----------");
console.log("-----------");
console.log("-----------");
console.log("-----------");
const a = 12345678;
// let res = 0;
// for(let i=0;i<a;i++){
// res+=i;
// }
// console.log(res);
let worker = new Worker("./worker.js");
worker.postMessage({num:a});
console.log("-----------");
console.log("-----------");
console.log("-----------");
console.log("-----------");
console.log("-----------");
</script>
this.onmessage = function (e) {
let num = e.data.num;
let res = 0;
for (let i = 0; i < num; i++) {
res += i;
}
console.log(res);
this.close();
}