一、理解
webworker并没有改变js单线程的本质,webworker多线程指的是浏览器多线程,因为浏览器可以提供多个js引擎的实例,每个实例可以独立的运行相应的程序,但在每个js引擎实例中js脚本还是在单线程得执行,每个实例就相当于一个webworker。
二、注意点
  1. webworker与主线程之间不能共享资源和作用域,通过异步事件在线程之间传递消息。
  2. webworker中不能访问window,document,parent对象,但是可以访问JSON(看到书上说applicationCache,navigator,location也可以访问,但实验了一下并不能访问,有知道怎么访问的还请指教啦)
  3. 同一个页面打开两次或者多次,创建webworker的路径是一样的,但是会创建不同的webworker,且是完全独立的。有些浏览器(Firefox,Chrome的高版本)支持共享Worker,通过 new ShareWorke来创建共享Worker实例
三、基本例子
//index.html
<body>
          <div id="num"></div>
          <input type="number" />
          <button>发送</button>
          <button>停止</button>
          <script>
              //子线程向主线程传递消息
              var w = new Worker("worker.js");
//            w.onmessage=function(e){//监听子线程的message事件
//                 document.getElementById("num").innerText =   JSON.parse(e.data).num;
//            }
              w.addEventListener("message",function (e){//监听子线程的message事件,既可以采用这种方式,也可以用上边注释里的方式
                  document.getElementById("num").innerText =  JSON.parse(e.data).num;
              })
                //主线程向子线程传递消息
              var btn =  document.getElementsByTagName("button")[0];
              btn.onclick = function () {
                   var num=  document.getElementsByTagName("input")[0].value;
                   w.postMessage(num);//向子线程发送message事件
                   
              }
              var stopBtn =  document.getElementsByTagName("button")[1];
               stopBtn.οnclick=function() {
                   w.terminate();//停止webworker
              }
          </script>
     </body>
//worker.js
var obj = {
     num :999
}
postMessage(JSON.stringify(obj));
addEventListener("message",function (e) {
     obj.num = e.data*2;
     postMessage(JSON.stringify(obj));
     //postMessage(obj);//报错
})
从这个例子中可看出
  • 子线程内监听消息或者发送消息,直接调用addEventListener、postMessage即可
  • 主线程内监听消息或者发送消息,要调用Worker实例上的addEventListener、postMessage
  • 要想获得通信的实际内容,需要访问回调函数的参数中的data属性
  • webworker里可以使用JSON来传递复杂类型值

关于webWorker的理解和简单例子相关推荐

  1. 关于UMAT的简单例子,以更好的理解UMAT的逻辑

    接触了abaqus的umat以后,通过几天的学习,才真正理解umat和Usdfld的区别,umat其实是讲的应力和应变的关系,即本构方程,而usdfld讲的是强度失效后的刚度矩阵如何折减,目前的认识, ...

  2. java 国际化例子_JavaSE 国际化 简单例子

    ①在src下添加两个文件: base_zh_CN.properties Test=\u8fd9\u662f\u4e2d\u6587 base_en_US.properties Test=english ...

  3. 组合恒等式7 组合变换的互逆公式 简介与简单例子

    组合恒等式7 组合变换的互逆公式 双重求和可以交换次序 互逆公式的证明 应用互逆公式证明组合恒等式 类似离散序列的Z变换,我们也可以定义以组合数为系数的组合变换,一个直观的例子是 bk=∑i=0k(− ...

  4. C#操作MySQL数据库的简单例子

    其实很简单,但是我在网上找的时候却找不到有用的信息,奇怪. 到这里下载驱动 http://www.mysql.com/products/connector/ 下载的包里面有使用的例子. 需要具备的知识 ...

  5. jar包的生成和使用简单例子

    一, 什么是jar包 java中, 源代码文件是*.java,   编译后就生成若干class文件.     这些class文件可以被各平台的jvm虚拟机执行. java还提供1个工具, 可以将这些c ...

  6. 什么是量子计算机?用一个简单例子来解释

    译者:王亮  作者:YK Sugi  原文:http://t.cn/EZAElk0 Hi,大家好! 不久前,我参观了加拿大温哥华的D-Wave Systems公司,这是一家制造前沿量子计算机的公司. ...

  7. rest_framework11:jwt简单例子/自定制基于jwt认证类

    jwt简单例子 一.登陆设置 1.不需要写login的视图类,使用jwt内置的. 2.需要前置条件,已有继承AbstractUser models,并且有数据,用于校验,返回token. urls.p ...

  8. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  9. VC API常用函数简单例子大全(1-89)

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCST ...

最新文章

  1. 7.Mongodb复制(副本集)
  2. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platfrom))
  3. typescript+react+antd基础环境搭建
  4. hadoop 提交程序并监控运行
  5. 以太坊ERC20代币合约案例
  6. switch 条件判断_C语言学习第7篇---C语言三大结构之一判断结构
  7. python2和3语法区别_python2和3语法区别
  8. 我的 Hive 为什么跑不起来/跑得慢?看看是不是少了这几行代码?
  9. 怎么用python将日期转化为数字_python实现将中文日期转换为数字日期
  10. 代码文档生成工具-Doxygen生成CHM和RTF图文教程
  11. 6.5(对三个数进行排序)
  12. 一个asp.net聊天是源码
  13. C#小游戏,拼音打字练习
  14. 微信小程序支付V3(Java版)
  15. 无法启动程序计算机丢失d,老毛桃处理win10系统提示无法启动程序计算机中丢失duilib_d.dll的恢复方法...
  16. Logback 快速定位用户在一次请求中的所有日志
  17. 如何下载沪深300历史数据
  18. 数据结构|最小生成树问题
  19. 这,这,是个神人,我喜欢
  20. 【视频理解论文】——TSM:Temporal Shift Module for Efficient Video Understanding

热门文章

  1. 服务器装CentOs7系统
  2. 示波器常用的13个概念
  3. MYSQL命令集大全
  4. 制作机顶盒CM311-1a的armbian img文件
  5. unity3d:ugui 长按按钮
  6. kmeans聚类目的干什么的_零基础学习Kmeans聚类算法的原理与实现过程
  7. GetMACAddress 在java查询中获取 MACA 地址
  8. redis入门教程详解
  9. 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)...
  10. docker gpu 创建 训练环境_通过Dockerfile创建caffe-gpu环境