• 丁鹿学堂:前端进阶分享之webworker知识总结


    web Worker

    我们知道js是单线程的。所有任务只会在一个线程上完成,一次只能做一件事件。前面的任务没有完成,后面的任务只能够等待。
    但是,随着计算机计算能力的增强,尤其是多核心的CPU的普及,单线程的弊端,就是没有办法充分发挥计算机的能力。
    webworker 的出现,就是给js创建多线程的环境。这样,一些高延时的任务,就可以交给webworker去执行,主线程负责UI交互,这样主线程就不会被阻塞。

    worker的兼容性

    worker在2009年就提出了草案。同时。在2009年的时候,火狐浏览器第一个支持了webworker,在2012年的ie10也实现了webworker,2012年,所有的主流浏览器都已经支持了webworker。

    worker的应用场景

    worker可以减少页面卡顿。通常情况下,js执行播放动画的时间如果大于16ms,用户操作响应大于100ms,页面打开到呈现大于1000ms的话,用户就会感到卡顿。这是chrome团队提出的。
    我们可以把js同步任务拆分为小于16ms的子任务,进行异步化执行。
    webworker将可能阻塞页面渲染的任务,都迁移到worker线程中去。这样就可以减少主线程的负担。这样worker线程可以跟主线程并行去执行,从而缩短页面渲染时间,减少卡顿。

    worker的API

    worker.js里面是我们让worker线程去执行的一些操作。
    postMessage方法是worker提供的,可以向wokker去推送一些消息。
    在workder线程里,就可以通过onmessage去监听这个消息。
    同时,worker线程也可以向主线程去推送一些消息。
    同样,主线程上也可以通过onmessage去监听worker线程上的一些消息。

    const worker = new Worker('./worker.js')
    worker.postMessage('111')
    worker.onmessage = (e) =>{
      console.log(e.data)
    }
    
    my.onmessage = (e)=>{
      console.log(e.data)
      postMessage('222')
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    worker的执行环境和主线程的对比
    相同点

    worker线程在创建的时候,也会独立产生一个js的运行环境。我们需要注意的几点,一个是worker的js环境也支持xmlHttpRequest,可以独立发送网络请求。也支持setTimeout和setInterval,可以实现定时器。也支持网络的I/O,也支持文件I/O

    不同点

    worker线程没有DOMAPI,无法操作DOM
    worker无法访问页面上的全局变量和函数
    worker也不能使用BOM相关的api,比如alert
    worker可以自行销毁,也受到主线程的控制,可以被主线程销毁。

  • 相关阅读:
    2022年面试复盘大全400道:Redis+ZK+Nginx+数据库+分布式+微服务
    计算机毕业设计(附源码)python助游乐系统
    下载Windows 10操作系统和在VMware虚拟机中配置完成
    fatal: Authentication failed for ‘https://gitee.com/xxx/xxx.git/‘
    pytorch里面的 nn.Parameter 和 tensor有哪些异同点
    强推这款丝滑酷炫酷的keychron K8键盘
    Springboot druid数据库密码加密配置步骤
    PlantUML基础使用教程
    pdf怎么压缩的小一点?分享pdf文件压缩方法
    Fiddler抓取Https请求配置
  • 原文地址:https://blog.csdn.net/qq_38525381/article/details/127811360