GWT缓存概念

8

有人能用简单的语言解释一下GWT中缓存的概念吗?我在很多地方都看到过这个词,但可能是由于我的知识有限,我无法理解它。

例如nocache.js、cache.js之类的东西

或者其他一些事情,比如让客户端永久缓存文件,或者如何使文件被客户端缓存,然后如果服务器上的文件发生更改,那么客户端只会重新下载这些文件。

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. 的内容,设置远期过期标头,告诉浏览器将其永久缓存。
  2. 对于任何匹配 .nocache. 的内容,设置缓存标头,强制浏览器重新验证资源。
  3. 对于其他所有内容,应根据资源变更的频率设置短期过期标头。
  4. 尽可能使用 ClientBundle / CssResource;这将自动将你的资源重命名为 *.cache 类别。

我的 GWT 2.4 应用程序创建的文件是 <md5>.cache.html,而不是 <md5>.cache.js。 - David Mann
奇怪的是,我有两个不同的GWT应用程序,一个生成cache.html,另一个生成cache.js。 - GreenKiwi

2

这篇博客文章很好地概述了GWT引导过程(以及许多其他部分的GWT系统),这与缓存内容及其原因有很大关系。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接