我正在开发一个必须可以离线使用的网页应用程序.
现在要做到这一点,据了解,您将会使用应用程序缓存功能或使用服务工作者.
但是,这是我的难题.当研究应用缓存时,the MDN clearly states:
Deprecated:
This feature has been removed from the Web standards. Though some browsers may still support it,it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time.
之后,另一个对话框建议使用服务工作者.
The Service Workers page然后继续说明服务工作者是一个实验技术,最好是参考兼容性表.
兼容性表说Safari和Internet Explorer不支持Service Worker.进一步咨询this site,并假设它是准确的,它指出微软已经开始整合服务工作者的工作,但是对于Safari来说,他们正在考虑“五年计划中的简短积极信号”.
现在这是对当前项目的关注,因为它是safari兼容的必要条件,但是我也不希望它在其他浏览器中打破.
你的建议是什么?在不久的将来,只需要使用较旧的应用程序缓存和更新?确定用户浏览器并采取适当行动?或者,还有另一种我失踪的方式吗?
提前致谢.
解决方法
还有其他选项可以在IDB内存储数据和/或资产,例如:
> Offline Web Applications with CouchDB,PouchDB and Emeber CLI
> Ember-Pouch
> Offline apps using Ionic Framework,PouchDB and AngularJS
尝试谷歌搜索“offline pouchdb ember”或“offline pouchdb angular”更多的例子.
确保离线可用性的唯一机制是服务工作者和appcache.期.
所有这些技术都依赖于您的站点是单页面应用程序,并且入口点可以访问.因此,如果您没有使用appcache或服务人员确保入口点总是可访问的,则必须回退到http缓存,并在投放资产时正确设置cache-related headers.无论如何,http缓存可以随时由UA驱逐.
面对这一决定,如果应用程序必须运行在离线和Safari中,唯一的选择是使用appcache(AFAIK,没有关于从Safari中删除appcache的消息).
为了降低风险,您可以选择将以前的技术(存储在IndexedDB上的资源)之一(除了Appcache之外)结合起来,所以您唯一缓存的是SPA的入口点.如果appcache不受支持,并且没有服务工作者的替代方案,您可以切换到缓存头替代.
无论如何,您可以使用功能检测(if(‘serviceWorker’在导航器中){…})来查看服务工作者是否可用,并将其使用.根据名为JakeCache(未测试)和others are to come的服务工作人员,有一个针对appcache的polyfill.