缓存和放大器之间有什么区别?永久缓存在浏览器中。 在GWT框架中,图像文件重命名为 .cache。模式,我在谷歌网站的某个地方读取,以便在GWT中永久缓存图像,配置App-Server永久缓存它们。 但我不知道该怎么做。 我的网站的图片永远不会改变,我想永远缓存它们而不进行任何版本检查(以获得最佳性能) 您诚挚的
答案 0 :(得分:3)
缓存由HTTP标头控制。如果你想让浏览器缓存图像,你必须发送适当的标题.ImageBundle只是将图像捆绑在一起,创建精灵以最小化HTTP请求。
GWT 只标记哪些文件应缓存( .cache。),哪些文件不缓存( .nocache。)。您的服务器负责设置适当的HTTP标头(实际上是您的服务器正确配置服务器!)。
Google在本文末尾解释了“完美缓存”: http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html
此处还有一篇关于HTTP缓存标题和浏览器/代理兼容性的好(一般)文章:https://code.google.com/p/doctype-mirror/wiki/ArticleHttpCaching
您需要实现一个过滤器并在web.xml中为Glassfish配置它。
我不会在这个答案中详细介绍,但请看一下这篇博文: http://blogs.oracle.com/cwebster/entry/caching_static_resources_in_glassfish
最后有filter class的链接。
答案 1 :(得分:1)
ClientBundle
允许您将图像和其他资源捆绑在一个文件中,此文件永远缓存,从而减少了服务器请求。
话虽如此,GWT引入了一个他们称之为完美缓存的概念。它的工作原理是将您的应用程序拆分为几个名为.cache.html的文件,并且当您的应用程序代码或资源发生更改时,md5部分始终会更改。然后是bootstrap脚本,其中包含查找正确的<md5>.cache.html
文件并加载它的逻辑。永远不应该缓存引导程序。
在您的应用服务器中,您需要配置类似这样的内容(本例中为Apache)
<Files *.nocache.*>
ExpiresDefault "access"
</Files>
<Files *.cache.*>
ExpiresDefault "now plus 1 year"
</Files>
在这种情况下,它设置为缓存一年。据我所知,没有永久缓存的设置,这只意味着一个非常高的到期时间。
对于Tomcat,据我所知,没有缓存控制,因此必须通过设置正确的HTTP头来手动完成。这可以通过使用过滤器自动完成。
/*Please don't use this in production!*/
public class CacheFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//cache everything for one year
response.addHeader("Cache-Control", "max-age=31556926");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) {
this.fc = filterConfig;
}
public void destroy() {
this.fc = null;
}
}
然后在tomcat中映射过滤器或在web.xml中映射衍生物(例如glassfish):
<filter>
<filter-name>cachingFilter</filter-name>
<filter-class>CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cachingFilter</filter-name>
<url-pattern>*.cache.*</url-pattern>
</filter-mapping>