首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Service Worker

昨天,Safari支持Service Worker了

近几年,前端的世界就是这样,新东西一波接一波,很多新闻还没来得及了解,就已经变成旧闻。

看到Service Worker自然就想到另一位老兄弟:Web Worker。

就看这名字,二者自然渊源深厚,同属JavaScript Worker系列,自然有共同点,比如都是浏览器另开一线程来跑一个js文件,为的是把一些工作和浏览器主线程分开,这种做法好处是worker不影响主进程(DOM渲染,事件响应等),不便之处自然是主次进程间的通信。

Worker和页面是剥离开的,所有不能操作DOM,和主进程间都靠postMessage通信,都是有作用域和生命周期的。

Web Worker mimics multithreading, allowing intensive scripts to be run in the background so they do not block other scripts from running

Web Worker其实是位老兄弟,主要使用场景是把复杂操作从主进程剥离开,比如在线IDE的代码高亮,每次用户输入,都通过worker来重新计算语法高亮,然后再更新页面展示,从而避免在页面主进程进行计算造成卡顿。

Web Worker在页面关闭时就结束了(可以理解为类似session周期)。

此外,Web Worker还扩展出了SharedWorker。

Service Worker is a programmable network proxy, allowing you to control how network requests from your page are handled

Service Worker相对而言要年轻很多,其生命周期脱离了页面生命周期限制,页面关闭了,Service Worker依然可以运行(但并不表示它是后台进程,他的运行受浏览器控制)。这个特点,使得Service Worker比Web Worker更有用,比如可以用来做提醒。结合Cache API,Service Worker很容易就可以实现资源离线访问。

Worker们涉及到(多)线程,听起来就比较高级(复杂),再加上奇特的生命周期,使其的执行结果很难有清晰的预期,再加上依然存在兼容性问题,使得其没有得到广泛使用,但形势越来越好了。

至少,目前拿来做个离线缓存是没啥毛病的

参考:

https://jakearchibald.com/2014/offline-cookbook/

https://serviceworke.rs

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180127G0RUVL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券