服务工作者和AppCache之间的核心差异是什么。每个人的利弊是什么,何时优先选择另一个人。
答案 0 :(得分:25)
主要区别在于AppCache是一个高级声明式API,您可以使用它来指定您希望浏览器缓存的资源集;而Service Worker是一个低级,命令式,事件驱动的API,您可以使用该API编写一个脚本,可以拦截获取事件并缓存其响应以及执行其他操作(如显示推送通知)。
优点和缺点主要是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的支持,因此您需要实施这两种操作,以便在支持这两种标准的所有浏览器中使您的应用脱机。
答案 1 :(得分:5)
除Myk Melez所述之外,Service Workers对应用程序缓存的主要好处之一是Application Cache仅在用户与网络断开连接时才有效,因此您无法管理以下情况:
1-“慢速网络” - 您的连接信号很强,但是某些外部实体(服务器,路由等)正在延迟传输到您的特定应用程序。
2-“Lie-fi”(您的手机显示连接到Wi-Fi或信号较低的手机网络),因此它实际上似乎是连接的。
Service Workers就像一个中间件,让您可以控制浏览器发出的请求,无论您是否连接,您都可以实际拦截请求并随时随地做出响应。因此,您可以实施“离线优先”原则。