Cesium原理篇:4Web Workers剖析(2)

What’s the WebWorkers?

       2008 年 W3C 制定出第一个 HTML5 草案中提出了工做线程(Web Worker)的概念,而且规范出 Web Worker 的三大主要特征:可以长时间运行(响应),理想的启动性能以及理想的内存消耗。Web Worker 容许开发人员编写可以长时间运行而不被用户所中断的后台程序,去执行事务或者逻辑,并同时保证页面对用户的及时响应。 前端

Web Workers类型有哪些?

  • 专用线程(Dedicated Workers)
    由主线程建立,而且只能和主线程通讯。至关于每一次建立都是一个新的实例。
  • 共享线程(Shared Workers)
    在同一域名下,能够和任何进程通讯(不一样的Tabs,iFrames等)。能够理解为第一次建立就是在浏览器中停驻,相似一个MemoryCache,此后若是其余页面须要建立该实例时,都会引用同一个Worker,成为跨进程的单例。
  • 后台线程(Service Workers)
    2014年推出的新规范,该API能够提供后台服务的能力,好比后台消息传递,代理假装,离线,消息推送等有意思的功能。本人测试Chrome下支持,但IE下平常(不支持)。

Web Workers能够干什么?

       JavaScript是异步的单线程,经过时间片轮换模拟并发效果(可参考以前写的《Web Workers实践》)。随着移动互联网以及带宽的提升,而HTML5提供了前端渲染的诸多好处(效果效率灵活轻量级),前端须要处理愈来愈多的数据,传输和解析也成为了一个很大的瓶颈。Workers+Promise绝对让你爽歪歪。下面举两个很实际的场景,让各位有一个清楚的认识。 浏览器

应用场景1:后台计算能力

       经过Worker将大量数据分析,统计的工做放到后台进行。好比为了减小文件大小,咱们每每会作一次zip压缩,好处很明显,既能够加密,有能够极大的提升网络传输的速度。但在传统的JS中,zip解压缩的性能损失是巨大的。随着技术的发展,鱼和熊掌也是能够兼得的。经过Workers技术,咱们把数据的解压缩和解析的工做交给子线程来处理,减轻主线程的负担。以下,如今咱们能够将Update放到Workers线程,主线程专一Render以及和用户的交互。 安全

应用场景2:共享线程代理多用户

       经过共享Worker,能够在多个进程中共用一个线程,接收从不一样链接发送过来的指令,而后实现本身的指令处理逻辑,指令处理完成后将结果返回到各个不一样的链接用户。有了这种代理技术,能够衍生出不少有意思的功能,在代理中对参数安全性进行审核,对并发数统计,用户自定义的JS函数的权限管理等,均可以经过子线程加一层壳来进行过滤。 网络

性能至上

       任何的技术都是有消耗的,关键在于技术人员针对自身状况,作出一个合理选择,这取决于经验和对各类因素全面的衡量。下面给出一些关键时间消耗,供各位选择。 多线程

  • Workers的建立通常都在1ms内,能够忽略不计
  • PostMessage时间
    不一样浏览器差别较大,Chrome下80ms左右,而IE只有25ms
    理论讲,若是Worker建立后调用PostMessage,此时PostMessage事件会放在请求队列,而此后的PostMessage则会直接在WebCore中响应,也就是首次事件可能时间要略久,但测试发现这种差别不并不存在或不明显。
  • OnMessage
    各个浏览器中时间消耗很小,忽略不计。
  • Transferring
    默认的参数都是Copy形式,若是参数对象很大,并且在线程中并不修改该对象值,则可使用Transferring,则参数为引用形式。不然参数拷贝会消耗大量时间。
  • 建立多个Workers后的性能
    未测试具体时间,但在真实应用中体验很不错

缺点

       Workers下不支持DOM对象,不支持Mutex,并非一种完全的多线程方案。我的认为Workers主要是把数据部分的工做放到线程,提供后台计算能力,让主线程和子线程更好的专一本身的工做,提升每一个线程的性能。 并发

       Service Workers须要HTTPS才能使用,localhost除外,这太不实用。致使这一有意思的功能只能玩玩而已。异步

相关文章
相关标签/搜索