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>
     
  • 相关阅读:
    saltstack推送文件到节点
    Linux查看僵尸进程
    Linux批量对某个目录下特定文件进行修改内容
    Linux查看网络连接数
    Linux查看当前目录下哪个目录占用容量最多
    Linux查看inodes最多的目录
    Linux用命令过滤出ip地址
    mysql表字段的增删改操作
    Python安装模块超时
    sql 查询结果中加入空值列
  • 原文地址:https://www.cnblogs.com/liumingwang/p/13177148.html
Copyright © 2011-2022 走看看