昨天,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
领取专属 10元无门槛券
私享最新 技术干货