8

有人可以简单地向我解释一下 GWT 中缓存的概念吗?我在很多地方都读过这篇文章,但可能由于我的知识有限,我无法理解它。

如nocache.js、cache.js

或其他事情,例如使客户端永久缓存文件或如何使客户端缓存文件,然后如果文件仅在服务器上更改,则客户端再次下载这些文件

4

2 回答 2

20

通常,有 3 种类型的文件 -

  1. 永远缓存
  2. 缓存一段时间
  3. 从不缓存

有些文件永远不能被缓存,并且总是落在“从不缓存”的桶中。但最大的性能优势来自系统地将第二个存储桶中的文件转换为可以永久缓存的文件。GWT 可以通过各种方式轻松地做到这一点。

这些<md5>.cache.js文件可以安全地永久缓存。如果它们发生变化,GWT 将重命名文件,因此浏览器将被迫再次下载它。

.nocache.js文件不应该被缓存。即使您更改了一行代码并重新编译,该文件也会被修改。nocache.js 包含 的链接<md5>.cache.js,因此浏览器始终具有此文件的最新版本很重要。

第三个存储桶包含图像、css 和任何其他属于您的应用程序的静态资源。CSS 文件总是在变化,所以你不能告诉浏览器“永远缓存”。但如果您使用ClientBundle / CssResource,GWT 将为您管理文件。每次更改 CSS 时,GWT 都会重命名文件,因此浏览器将被迫再次下载它。这使您可以设置强缓存标头以获得最佳性能。

总之 -

  1. 对于任何与.cache 匹配的内容。, 设置一个 far-in-the-future expires 标头,有效地告诉浏览器永远缓存它。
  2. 对于任何与.nocache 匹配的内容。,设置缓存头,强制浏览器与服务器重新验证资源。
  3. 对于其他所有内容,您应该根据更改资源的频率设置一个简短的 expires 标头。
  4. 尝试使用 ClientBundle / CssResource;这会自动将您的资源重命名为 *.cache 存储桶
于 2011-02-28T08:56:50.083 回答
2

这篇博文很好地概述了 GWT 引导过程(顺便说一下,GWT 系统的许多其他部分),这与缓存的内容和原因有很大关系。

基本上,生成的 nocache.js 文件是 JS 的一小部分,其唯一目的是决定应该下载哪个生成的排列。

每个单独的排列都包含特定于用户浏览器、语言等的应用程序的实现。这比简单的引导代码要多得多,因此需要缓存以便您的应用程序快速响应。这些是 GWT 编译器生成的 cache.html 文件。

当您重新编译和部署应用程序时,您的用户将照常下载 nocache.js 文件,但这会告诉他们的浏览器下载具有应用程序新功能的新 cache.html 文件。现在,它们也会在下次加载您的应用程序时被缓存。

于 2011-02-28T06:32:51.313 回答