一、简要介绍

1.worker使得JS可以多线程运行,但是在worker不能操作dom,也没有window对象,不能操作本地文件,仅仅可以发送ajax以及计算。
2.主线程和worker线程之间的数据交互是采用onmessage和postmessage。
3.主线程结束worker的方式是worker.terminate(),自己结束的是this.close().

二、实例使用

  1. <script>
  2. console.log("-----------");
  3. console.log("-----------");
  4. console.log("-----------");
  5. console.log("-----------");
  6. const a = 12345678;
  7. let res = 0;
  8. for(let i=0;i<a;i++){
  9. res+=i;
  10. }
  11. console.log(res);
  12. console.log("-----------");
  13. console.log("-----------");
  14. console.log("-----------");
  15. console.log("-----------");
  16. console.log("-----------");
  17. </script>
  1. 分析:由于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();
}

image.png

速度的差异

image.png
image.png