Service Worker 和 AppCache 的比较

Posted

技术标签:

【中文标题】Service Worker 和 AppCache 的比较【英文标题】:Comparison between service worker and AppCache 【发布时间】:2016-07-02 11:48:20 【问题描述】:

Service Worker 和 AppCache 的核心区别是什么。每种方法的优缺点是什么,何时更喜欢其中一种。

【问题讨论】:

【参考方案1】:

除了Myk Melez 所说的,Service Worker 对 Application Cache 的主要好处之一是 Application Cache 仅在用户断开网络时才起作用,因此您无法管理以下情况:

1- “慢速网络” - 您的连接信号很强,但是一些外部实体(服务器、路由等)正在延迟传输到您的特定应用程序。

2- “Lie-fi”(您的手机显示已连接到 wi-fi 或信号较弱的蜂窝网络),因此实际上没有连接时,它似乎已连接。

Service Worker 就像一个中间件,让您可以控制浏览器发出的请求,您实际上可以拦截请求并在任何您想要的地方做出响应,无论您是否已连接。所以你可以实现“离线优先”的原则。

【讨论】:

【参考方案2】:

主要区别在于 AppCache 是一个高级的声明式 API,您可以使用它指定您希望浏览器缓存的资源集;而 Service Worker 是一个低级、命令式、事件驱动的 API,您可以使用它编写一个脚本,该脚本可以拦截 fetch 事件并缓存它们的响应以及执行其他操作(例如显示推送通知)。

优点和缺点很大程度上是API设计的功能:理论上,AppCache更容易使用,但用例有限;而 Service Worker 更难使用,但更灵活。

尽管如此,由于设计不佳,AppCache 被认为在实践中难以使用(有关设计问题的列表,请参阅Application Cache Is A Douchebag)。它已被弃用,因此正在从浏览器中删除(根据Using the application cache)。

因此,首选 AppCache 的唯一原因是在尚不支持 Service Worker 的浏览器上离线应用,正如 Kenneth Ormandy 在Don’t Wait for ServiceWorker: Adding Offline Support with One-Line 中所建议的那样。

比较 Can I use Service Workers? 和 Can I use Offline web applications? 以查看浏览器支持的差异。但请注意,支持 Service Worker 的浏览器(如 Chrome 和 Firefox)正在取消对 AppCache 的支持,因此您需要同时实现这两者,以便在支持任一标准的所有浏览器上离线您的应用。

【讨论】:

以上是关于Service Worker 和 AppCache 的比较的主要内容,如果未能解决你的问题,请参考以下文章

Service Worker的缓存时机与缓存策略

web worker 与 service worker

一句话总结Web worker,Service worker和worklet

一句话总结Web worker,Service worker和worklet

Service worker 简介

Service worker 简介