我不明白 HTML5 AppCache 的意义。我们已经有了一个普通的缓存。如果您第一次访问一个网站,它已经缓存了所有资产。AppCache 提供了哪些额外价值?它只是一个文件列表,以便浏览器知道要下载哪些资产,即使它们现在没有被 HTML 引用?浏览器是否确保缓存是“全有或全无”,即它是否确保清单引用的所有内容都被缓存,或者什么都没有?
3 回答
我认为您缺少的一点AppCache
是专门设计用于允许离线使用网络应用程序(和网站),尽管当用户在线时,普通浏览器缓存提供的相同速度优势也由AppCache
.
与浏览器缓存的主要区别在于,您可以指定浏览器应缓存在清单文件(可能是您的整个站点)中的所有资产,而浏览器缓存将仅存储您实际访问过的页面(和相关资产)。
我不是这方面的专家AppCache
,但我知道它并非没有问题。这里有一篇非常好的文章,来自一个曾经AppCache
允许他的移动网站的部分内容可以离线使用的小伙子。它包括他们决定使用它的一些理由以及他们在这样做时遇到的一些问题。
这篇关于这个主题的HTML5 Rocks 文章也有一些很好的信息。
AppCache 实际上使用浏览器缓存来支持其操作。它相当于下载应用程序以在本地运行的浏览器。
用户第一次访问该页面时,该页面的资源将从服务器加载并存储在普通缓存中。如果页面指定了 appcache 清单,浏览器将下载清单并获取其中的所有资源(即使它们没有出现在嵌入清单的页面上)。然后将它们存储在 appcache 中。
用户第二次访问该页面时,浏览器将检查其应用缓存。如果该 URL 存在条目,它将根据清单中指定的规则从 appcache 而不是从服务器加载页面(清单可以将某些资源显式标记为从网络获取)。
浏览器从appcache加载页面后,会联系服务器查看是否有更新的manifest。如果清单被更新,它将从清单中获取资源。这些获取是使用普通浏览器缓存规则完成的,因此其中一些资源实际上可能最终从常规浏览器缓存而不是从服务器中获取(这允许您在使用 appcache 开发离线应用程序时进行差异更新)。新版本的 appcache 与旧版本是分开的。获取新版本后,用户继续与旧版本中的资源交互,直到他们刷新主页,然后加载新版本并丢弃旧版本。
另一个重要的一点是,appcache 对于何时丢弃资源有不同的规则。Appcache 基本上从不丢弃最新的一组资源,并将它们作为一个整体进行缓存。为了防止滥用,它对站点缓存的大小实施了存储限制(有时低至 5 MB)。相比之下,浏览器缓存没有每个站点的限制,但如果达到全局缓存限制,则会丢弃站点中的单个资源。
HTML 5 应用程序缓存的重要特性是它使 Web 应用程序离线可用。普通浏览器缓存没有给出。
除了这个应用程序缓存将提供
速度- 由于指定页面的全部内容将被缓存到浏览器,因此它将提供比浏览器缓存更好的速度
减少服务器负载- 不需要一直回发,因为所有内容都在缓存中,直到清单文件中有任何更改
缓存清单:- 缓存清单文件是 HTML5 应用程序缓存的核心。我们可以指定哪些页面不需要缓存,哪些不应该缓存,甚至我们可以重用这个作为错误处理技术,因为我们可以在FALLBACK部分指定自定义错误页面来显示用户是否请求内容需要网络连接
有关应用程序缓存的基本了解,您可以查看本教程