zoukankan      html  css  js  c++  java
  • web worker sharedWorker


    // 主进程代码 let w1 = new Worker('./js/my.js') w1.addEventListener('message',function(evt){ console.log('evt',evt.data) }) w1.postMessage('main path message')
    // 子进程代码(my.js文件)
    
    // 给主进程发送消息
    this.postMessage('the result is 100')
    
    // 接受主进程消息(方法一)
    // this.onmessage = ret => {
    //     console.log(ret.data)
    // }
    // 接受主进程消息(方法二)
    this.addEventListener('message',function(evt){
            console.log(evt.data)
            // 关闭自己进程
            this.close()
    })
    

     Web Worker 有以下几个使用注意点:

    (1)同源限制

    分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。

    (2)DOM 限制

    Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用documentwindowparent这些对象。但是,Worker 线程可以navigator对象和location对象。

    (3)通信联系

    Worker 线程和主线程不在同一个上下文环境,它们不能直接通信,必须通过消息完成。

    (4)脚本限制

    Worker 线程不能执行alert()方法和confirm()方法,但可以使用 XMLHttpRequest 对象发出 AJAX 请求。

    (5)文件限制

    Worker 线程无法读取本地文件,即不能打开本机的文件系统(file://),它所加载的脚本,必须来自网络。

    Web Worker 通常应用于哪些方面呢?
    处理密集型数学计算
    大数据集排序
    数据处理(压缩、音频分析、图像处理等)
    高流量网络通信
     
    实例:
    Worker 线程完成轮询
    有时,浏览器需要轮询服务器状态,以便第一时间得知状态改变。这个工作可以放在 Worker 里面。
     
    sharedWorker:共享线程,同源策略下,多个运行环境共用同一个线程,包括数据。
     
    // 共享线程的JS文件 (my.js文件)
    
    var a = 1;
    onconnect = function (e) {
        var port = e.ports[0];
        port.onmessage = function () {
            port.postMessage(a++)
        }
    }
    // html文件(index.html)
    
    <!DOCTYPE html>
    <html>
    <head><meta charset="utf-8"><title>worker demo</title></head>
    <body>
        <div> <h1>使用shared worker:</h1> </div>
        <button style="padding: 10px; margin: 10px 0;">点击一下</button>
        <div><span>点了 <span class="time">-</span> 下</span></div>
        <iframe src="index2.html" width='500px' height="400px"></iframe>
        <script>
            let button = document.querySelector('button');
            let worker = new SharedWorker('worker.js');
            worker.port.start();
            let time;
            button.addEventListener('click', function () {
                worker.port.postMessage('start');
            });
            let timeDom = document.querySelector('.time');
            worker.port.onmessage = function (val) {
                timeDom.innerHTML = val.data
            }
        </script>
    </body>
    </html>
    // html文件(index2.html)
    <!DOCTYPE html>
    <html>
    <head><meta charset="utf-8"><title>worker demo</title></head>
    <body>
        <div><h1>使用shared  worker:</h1></div>
        <button style="padding: 10px; margin: 10px 0;">点击一下</button>
        <div><span>点了 <span class="time">-</span> 下</span></div>
        <script>
            let button = document.querySelector('button');
            let worker = new SharedWorker('worker.js');
            worker.port.start();
            let time;
            button.addEventListener('click', function () {
                worker.port.postMessage('start');
            });
            let timeDom = document.querySelector('.time');
            worker.port.onmessage = function (val) {
                timeDom.innerHTML = val.data
            }
        </script>
    </body>
    </html>
     
  • 相关阅读:
    Windows性能计数器应用
    Azure Oracle Linux VNC 配置
    Azure 配置管理系列 Oracle Linux (PART6)
    Azure 配置管理系列 Oracle Linux (PART5)
    Azure 配置管理系列 Oracle Linux (PART4)
    Azure 配置管理系列 Oracle Linux (PART3)
    Azure 配置管理系列 Oracle Linux (PART2)
    vagrant多节点配置
    docker基本操作
    LINUX开启允许对外访问的网络端口命令
  • 原文地址:https://www.cnblogs.com/liumingwang/p/13177148.html
Copyright © 2011-2022 走看看