HTML5多线程JavaScript解决方案Web Worker-专用Worker和共享Worker的详细代码介绍


当前第2页 返回上一页


如果我们的网站或者App可以同时加载多个tab(标签页)
那么如果使用普通的worker我们可能会重复创造多个线程
这必然会占用系统资源
这时如果我们可以让App或整站的页面实例都能够共享一个worker
那就很棒了~
共享线程和专用线程使用方式差不多,稍微复杂一点点而已

1

var worker = new SharedWorker('scripts/worker.js');

由于共享线程需要与多个程序实例或页面链接
所以它需要通过某种方式来了解消息的来源
这个方式就是利用一个唯一标识符port(端口)
这样我们刚才的例子就需要写成这个样子

1

2

3

4

//demo.jsvar worker = new SharedWorker('scripts/worker.js');

worker.port.addEventListener('message', function(e){

  console.log(e.data); //500000000067109000}, false);

worker.port.start();

在主线程中
端口连接必须初始化
使用API worker.port.start();

1

2

3

4

5

6

7

8

9

10

//worker.jsfunction calculate(){

  var ret = 0;  for(var i = 1; i <= 1e9; i++){

    ret += i;

  }  return ret;

}

addEventListener('connect', function(e){

  var port = e.ports[0];

  port.start();

  port.postMessage(calculate());

});

在共享worker内部同样需要初始化端口连接port.start();
除此之外,我们还需要处理额外事件onconnect
这个事件为我们的特定连接提供了端口对象
var port = e.ports[0];用于获取连接分配的端口


我们的onmessage事件就可以写在onconnect事件处理函数内部

1

2

3

4

5

6

7

addEventListener('connect', function(e){

  var port = e.ports[0];

  port.addEventListener('message', function(e){    ...

    port.postMessage(...);    ...

  });

  port.start();

});

除此之外,其他的功能共享Worker和专用Worker都是一样的

以上就是HTML5多线程JavaScript解决方案Web Worker-专用Worker和共享Worker的详细代码介绍的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

javascript如何在object中删除属性

js数组怎么转为字符串

h5在canvas中实现自定义路径动画

深入学习es6作用域

javascript是不是解释型语言

如何使用HTML5+css3实现粒子效果文字动画特效(附完整代码)

javascript实现无限级递归树的代码示例

javascript的2种变量范围有什么不同

理解javascript中的closure(闭包)

h5怎样调用相机拍照并压缩图片

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...