美文网首页
Web Worker多线程

Web Worker多线程

作者: 码农私房菜 | 来源:发表于2023-12-28 13:16 被阅读0次
    Web Worker是HTML5引入的一项技术,它允许在浏览器中创建多线程环境,将一些耗时的计算任务放在后台线程中执行,以避免阻塞主线程,提高页面的响应性和性能。

    Web Worker具有以下特点和用途:

    • 多线程环境:Web Worker在浏览器中创建了一个独立的线程环境,与主线程(通常是UI线程)相互独立运行。这样可以使得主线程不受耗时任务的影响,保持页面的流畅性和响应性。
    • 后台执行:Web Worker用于执行一些耗时的计算、数据处理或其他需要大量CPU资源的任务。这些任务通常在后台线程中执行,不会阻塞用户界面的更新和交互。
    • 无法直接访问DOM:Web Worker在独立的线程中运行,因此无法直接访问页面的DOM结构,也不能更新UI。这是为了保证线程安全和避免竞争条件。
    • 事件通信机制:Web Worker通过事件机制与主线程通信。主线程可以向Web Worker发送消息,Web Worker通过监听message事件来接收消息并进行相应的处理。同样,Web Worker也可以向主线程发送消息。
    使用
    • 主线程
    // 创建Worker对象实例
    var worker = new Worker('http://localhost:3000/worker.js'); // 只会执行url指定的脚本,必须同源
    
    // 监听并接收worker线程消息
    worker.onmessage = (e) => {
        console.log(`收到worker线程消息:${e.data}`);
        work.terminate(); // 销毁worker线程
    };
    
    // 向worker线程发送消息
    worker.postMessage('hello worker')
    
    • worker线程(worker.js)
    // 监听并接收主线程发送的消息
    self.onmessage = (e) => { // 在子线程中,self代表worker子线程的全局对象,也可以用this代替self,或者省略也行。
        console.log(`收到主线程消息:${e.data}`); 
        //向主线程发送消息
        postMessage('你好,我是worker!');
    
        // 子线程自己关闭
        // self.close()
    }
    

    相关文章

      网友评论

          本文标题:Web Worker多线程

          本文链接:https://www.haomeiwen.com/subject/hzndndtx.html