【问题标题】:Wicket: proper caching of CSS resourcesWicket:正确缓存 CSS 资源
【发布时间】:2011-05-25 21:58:00
【问题描述】:

我们刚刚从 GWT 迁移到 Wicket 1.4。虽然总的来说非常高兴,但对于 GWT 简化的某些事情,我们仍然有一些学习曲线。其中之一是资源缓存。

如何配置我们应用的资源(尤其是 CSS),以便它们不会随每个页面请求一起下载?

我们在某些页面元素上看到一些闪烁,因为没有立即应用样式,大概是因为每次都在下载样式表。我跟踪了我们的日志,事实上,我几乎在每个页面请求中都看到了对样式表的请求。

我们在 HTML 文件中直接引用 CSS,如下所示:

    <link href="/css/ag.screen.css" rel="stylesheet" type="text/css">
    <link href="/css/ag.base.css" rel="stylesheet" type="text/css">

我不确定这是否重要,但我们所有的页面都挂载了IndexedParamUrlCodingStrategy,因为我们需要它们既可收藏又具有特定的 URL 结构。

我尝试实现 Stefan Fußenegger 在他的 blog 中建议的内容(即通过标题贡献而不是直接在 HTML 中引用 CSS),但这似乎没有帮助(我尝试使用“curl -一世”)。

在 Wicket 1.4 中是否有为资源设置 Cache-Control 或 Expiration 标头的标准方法?值得为此迁移到 Wicket 1.5 吗? (我犹豫是否这样做,因为它还没有正式发布)。

编辑:我刚刚又尝试了 1.5,但目前缺乏文档确实是一个障碍。 IndexedParamUrlCodingStrategy 和相关的类都没有了,迁移指南几乎没有什么可说的。

编辑 2: 我刚刚注意到一些非常奇怪的事情——当我通过直接输入 URL 或单击 BookmarkablePageLink 到达我的一个页面时,该页面上引用的资源(CSS、图像等)似乎被缓存了(我的日志中没有看到对它们的请求)。但是如果我通过表单提交到达同一页面,所有资源都会再次下载。为什么表单提交会导致页面引用的资源被重新下载?

【问题讨论】:

  • 只是好奇是什么让您从 GWT 转到 Wicket?
  • Alex- 一长串的东西。最近的几个问题(我想不通)是让 Facebook/Twitter 按钮工作、集成 Adsense、试图让 Google 索引 Ajax 内容以及与新的 GWT“编辑器”框架作斗争的问题。事实证明,在“传统”框架中编写应用程序要简单得多,然后根据需要编写少量 Javascript 以用于交互内容。我多年来一直是 GWT 的粉丝,所以这对我来说并不是一件容易的事。计划很快写一篇关于它的博客文章。
  • 有趣。我使用了几年的 Wicket,但最终偏向了 GWT。 Wicket 很棒,但并没有像我希望的那样得到广泛采用——这意味着让人们熟悉它变得更加困难。无论如何,我想在你写的时候看到你的博客条目。请告诉我。谢谢。
  • Alex,确实很难找到具备 Wicket 技能的人,但是如果您找一个在 J2EE/Servlets 方面相当胜任的人,您可以教他们 Wicket 的基础知识,并让他们在情侣装的日子。我不能对 GWT 说同样的话。

标签: java caching wicket cache-control


【解决方案1】:

由于您要迁移到 Wicket,我建议您使用 1.5RC4.2。查看有关此 RC 的错误报告,我认为下一个可能是 1.5.0Final。 关于缓存,请参阅此 wiki 页面:https://cwiki.apache.org/WICKET/caching-in-wicket-15.html。 它大约是 1.5,但它也说明了与 1.4 的区别。

【讨论】:

  • 在发布我的问题之前,我实际上给了 1.5RC4 一个简短的尝试。但是在看到他们如何移动了这么多代码库(在我的 IDE 中只有红色波浪线)之后,我不想承诺它,直到我确定尘埃落定。如果他们接近决赛,我会再试一次。谢谢。
  • 刚刚再次尝试了 1.5,但由于缺乏文档而受阻,尤其是在安装页面方面。我们使用具有非常特定结构的可书签 URL,如果没有文档,我无法弄清楚如何在 1.5 中使其工作。
  • 我发现可收藏网址也存在同样的问题。输出现在使用查询参数 ?name1=value1&name2=value2 而不是 1.4.x 形式的 /name1/value1/name2/value2。我们拥有数百个站点,其中包含许多使用 1.4“目录”样式结构的页面链接。更改为查询参数结构会破坏网络上的许多现有链接。
【解决方案2】:

我和你有同样的需求,我越需要缓存资源客户端。

现在我被困在 1.4.x 下,我找到了适合我的解决方案。 我使用了 Stefan Fußenegger 写的很棒的图书馆,他提供了here。实现非常简单,我在生产模式下使用 StaticResourceVersionProvider。到目前为止,我没有遇到任何问题(现在对我的客户来说是坚如磐石)。

如果您需要有关我如何使用此解决方案的详细信息,请不要犹豫。

【讨论】:

  • 甜蜜。看起来我没有深入研究 Stefan 的网站。现在试一试。谢谢。
【解决方案3】:

要管理非 Wicket 资源的标头,您可以使用 web.xml 中 WicketFilter 之前列出的普通 Servlet 过滤器。只需检查请求 URL,如果文件扩展名是 .css/.js/... 则只需在响应中设置缓存标头。 关于 Wicket 1.5 中的 **UrlCodingStrategies 阅读 http://wicketinaction.com/2011/07/wicket-1-5-request-mapper/ 和接下来的两篇文章。我希望你会更清楚。

【讨论】:

    【解决方案4】:

    您可以获得开箱即用的资源指纹。创建缓存指纹的策略可以很容易地修改或更改。

    the Wicket wiki page about how resource caching works in 1.5 有更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2014-01-21
      • 2011-12-01
      相关资源
      最近更新 更多