Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

非常有意义,却尚未兼容的SharedWorker

  WHATWG虽然推出了很多API,但真正有用的还真不多。这回要介绍的SharedWorker就是为数不多的有用API其中之一。虽然目前在Chrome之外的浏览器上并没有被实现,但我觉得它会是一个非常合理的思想。将来的Web可能会变成一种基于它来实现的模式。
  首先,它有什么用呢?我们平时使用的Worker都是针对一个页面的,只能用于解决一些当页面的复杂数据计算之类的问题。而SharedWorker是多页面通用的,它就可以解决更多问题。目前的Web势态是所有程序都基于页面的,而SharedWorker的引入开辟了一个,“Web程序”在后台线程的概念。而且它还可以和页面交互,相当于把所有页面都聚拢起来了。这对于一些现代Web架构是非常有价值的!比如本网站的架构是基于WebSocket的架构。为每个页面都维护一份WebSocket代码不仅耗费大量的连接数,而且还拖慢性能。这些通用的连接最好当然做成可跨域页面共用的,只不过在SharedWorker引入之前并没有一个完美的跨页面通信解决方案。所以我认为,这个API在将来也许会变得非常流行。
  下面来看看它到底是如何工作的吧!下面是一个简易的跨页面通信的代码 <input id="inp" /><input type="button" id="btn" value="发送" />
<script>
var s=new SharedWorker('x.js');
s.port.onmessage=function(e){
  console.log(e.data);
};
btn.onclick=function(){
  s.port.postMessage(inp.value);
  inp.value="";
};
s.port.start();
</script>
//x.js
var pool=[];
onconnect=function(e) {
  pool.push(e.ports[0]);
  e.ports[0].onmessage=function(e){
    for(var i=0;i<pool.length;i++)
      pool[i].postMessage(e.data);
  };
};
  这里的x.js就是运行在多页面享的一个隐藏区域中的,每当对其做SharedWorker实例化,如果线程已存在就直接加入那个线程,否则创建一个新的。再看这个x.js的代码也很特殊,和普通的Worker是完全不同的,它更像NodeJS写的聊天服务器。对,因为这个例子写的是一个跨页面通信。执行起来就像下面这样。

  然而,我觉得这个SharedWorker目前还不太完善,还有很多可能会被用到的功能没有完善,而且Firefox依然没有实现它。所以目前如果想使用它需要考虑非常复杂的因素。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^