我在 Tomcat 服务器上使用 Grails 运行一个网站。当我更新网站页面时,Firefox 会正确应用更新,但 Internet Explorer 似乎会保留缓存的值,直到我明确删除临时 Internet 文件。当网站更新时,如何确保 Internet Explorer 用户拥有最新的网页?
编辑:我在 Internet Explorer 9 上进行了测试,但我认为以前的版本也有同样的问题。
编辑 2:问题只发生在 css 和 javascript 中。
我在 Tomcat 服务器上使用 Grails 运行一个网站。当我更新网站页面时,Firefox 会正确应用更新,但 Internet Explorer 似乎会保留缓存的值,直到我明确删除临时 Internet 文件。当网站更新时,如何确保 Internet Explorer 用户拥有最新的网页?
编辑:我在 Internet Explorer 9 上进行了测试,但我认为以前的版本也有同样的问题。
编辑 2:问题只发生在 css 和 javascript 中。
最可靠的方法是告诉浏览器重新加载所有 css 和 javascript 资源而忽略缓存,为此,您应该更改 css 和 javascript 资源的名称,以便浏览器知道它需要重新加载它们。
虽然每次在生产环境中部署新构建时重命名所有 css 和 javascript 资源可能是乏味/不切实际的任务,但您可以使用
用户界面性能插件
以此目的。如果配置正确,它的插件可以确保当你创建一个新的战争时,它会将当前版本号从存储库附加到文件名,因此文件名会被更改。对此的限制是您必须更新 gsp 中对 css 和 javascript 文件的所有引用,以使用插件的 tablib 而不是直接包含它们(这样在重命名文件时它也会替换 gsp 文件中的相应引用)。
此外,该插件还可以为您提供许多其他功能,这些功能可能会帮助您提高 Web 应用程序的速度。有关插件的更多详细功能,请单击此处
希望有帮助。
与上述 Bala 类似的更现代的答案是使用Resources插件(默认包含在 Grails 2.0+ 中,并且可用于 Grails 1.3+ 作为插件)与Cached Resources插件结合使用。
缓存资源插件与 UI 性能类似,它用特殊的基于哈希的链接替换所有静态内容链接。比 UI 性能更好的是链接基于文件内容,因此如果静态项的内容没有更改,它们不会更新。这很棒,因为您的用户不会被迫重新下载实际上没有更改的文件。
Resources 插件允许您将所有资源定义为模块 - 这是描述应用程序中使用的 CSS、图像和 JavaScript 的一种非常强大的方式。该手册写得很好,将帮助您入门。它需要几个步骤:
<r:layoutResources/>
到标签中的布局中<head>
,就在结束</body>
标签之前。<link/>
、、<script/>
和<img/>
标签替换为<r:require/>
、、<r:script/>
和<r:img/>
等价物。ApplicationResources.groovy
文件中,并将它们设置为可重用模块。进行切换实际上非常快,一旦您这样做,您将能够利用其他插件,例如Zipped Resources(启用 GZip 压缩)和YUI Minify Resources,它可以缩小 CSS 和 JS 文件。