2017-04-23 56 views
0

我想使应用程序完全脱机。即用户点击一个按钮(或不这样做,这可能会自动发生),并且每个页面(包括所有动态页面)和网站上的资源都可以被缓存。如何初始化所有网站页面的sw-precache

我知道我需要生成所有资产的列表,是否有一个工具可以做到这一点,或者任何内置于sw-precache的方式?

此外,缓存的容量有多大,可用的时间有多长?我认为它可以是任何大小和可用,除非用户特别清除浏览器缓存。

回答

0

如果您有一个本地目录充满了静态文件(HTML,JS,CSS等),sw-precache可以配置为根据您传入的模式自动预先缓存所有这些文件(或它们的某些子集) staticFileGlobs option。在您进行本地更改时,用户浏览器中先前预先缓存的条目将保持最新状态,重新生成service-worker.js并重新部署。

通常,使用高速缓存存储API可以存储的最大数据量没有硬性上限。这取决于当前空间的空间量(可能还有其他启发式)。

在确定哪些文件被预先存储并确保它们实际上是用户可能觉得有用的文件时,您应该考虑周全。例如,如果用户第一次访问您的(假想的)文档站点,他们最终将下载和存储数千个单独的HTML文档,这会浪费您的服务器和用户的带宽 - 除了占用空间用户的设备。

如果您有大量资源是可选或不可能被所有访问者需要的,那么对于关键资源使用预先缓存策略,以及针对可选资源的runtime caching strategy是最佳选择。您可以将运行时缓存策略与最大缓存大小或最大时间相结合,底层的库将负责为您删除旧条目。

+0

谢谢,这回答了存储限制。我有运行时缓存设置来缓存所有内容。基本上我希望允许用户通过点击按钮来缓存所有页面,包括动态生成的页面(更新我的问题),以允许完全离线使用。据我所知,唯一的办法是访问每个页面来初始化缓存,但是没有内置的方法可以实现这一点(不需要重新部署任何动态更改)? – riley

+0

如果您提前知道可能的URL,则可以提前预缓存动态页面,并使用https://github.com/GoogleChrome/sw-precache#dynamicurltodependencies-objectstringarraystring选项。既然你提到“点击一个按钮”,这使得我不想预缩,而是按需缓存。你可以按照需要使用'window.caches'填充缓存,然后通过'runtimeCaching'设置一个路由来使用适当的更新策略(比如''''''''''''''')来处理这些缓存的响应。 –