2011-05-25 80 views
0

我们刚从GWT移到Wicket 1.4。虽然总体上非常高兴,但对于GWT变得简单的某些事情,我们仍然有一些学习曲线。其中一件事就是资源缓存。Wicket:正确缓存CSS资源

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

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

我们直接引用CSS在我们的HTML文件,像这样:

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

我不知道它的问题,但我们的所有页面都装有IndexedParamUrlCodingStrategy,因为我们需要他们两个可收藏并具有特定的URL结构。

我试着实现StefanFußenegger在他的blog(即通过头文件引用而不是直接在HTML中引用CSS)的建议,但这似乎没有帮助(我试着用“curl -I “)。

有没有为Wicket 1.4中的资源设置Cache-Control或Expiration标题的标准方式?这是值得转移到Wicket 1.5吗? (我很犹豫,因为它尚未正式发布)。

编辑:我刚刚给了1.5次另一个尝试,但缺乏文档在这一点上确实是一个障碍。 IndexedParamUrlCodingStrategy和相关的课程已经没有了,移植指南几乎没有什么可说的。

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

+0

只是好奇,是什么让你从GWT移动到Wicket? – 2011-05-26 00:00:43

+0

亚历克斯 - 一长串事情。最近的一些(我的头顶)是让Facebook/Twitter按钮工作,整合Adsense,试图获取谷歌索引的Ajax内容,以及为新的GWT“编辑器”框架而努力的问题。事实证明,在“传统”框架中编写应用程序要简单得多,然后根据需要为交互式内容编写小量的Javascript。多年来我一直是GWT的粉丝,所以这对我来说并不轻微。计划很快写一篇博客文章。 – 2011-05-26 03:38:40

+0

有趣。我使用Wicket几年,但最终偏向GWT。 Wicket棒极了,但它并没有像我希望的那样获得太多的认可 - 这意味着很难让人们熟悉它。无论如何,我希望在编写它时看到您的博客条目。请让我知道。谢谢。 – 2011-05-26 04:59:11

回答

1

既然你要搬到Wicket,我建议你使用1.5RC4.2。看看关于这个RC的错误报告,我认为下一个可能是1.5.0Final。 关于缓存,请参阅此wiki页面:https://cwiki.apache.org/WICKET/caching-in-wicket-15.html。 它约为1.5,但它也说明了与1.4有什么不同。

+0

在发布我的问题之前,我实际上给了1.5RC4一个简短的尝试。但是看到他们如何在代码库中移动了很多东西(我的IDE中只有红色波浪线),我不想承诺,直到我确信尘埃落定。如果他们接近决赛,我会再投入一次。谢谢。 – 2011-05-26 15:49:24

+0

刚刚尝试过1.5,并且由于缺乏文档而受到阻碍,特别是在安装页面方面。我们使用具有非常特定结构的可加入书签的网址,并且我无法弄清楚如何在没有文档的情况下在1.5版本中完成这项工作。 – 2011-05-27 11:31:46

+0

我发现了与可收藏的网址相同的问题。输出现在使用查询参数?name1 = value1&name2 = value2而不是1.4.x form/name1/value1/name2/value2。我们有数百个网站使用1.4'目录'样式结构托管了许多链接到其中的页面。更改为查询参数结构会破坏网络上的很多现有链接。 – Volksman 2011-09-21 01:04:08

1

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

现在我被困在1.4.x下,我找到了适合我的解决方案。 我使用伟大的图书馆斯特凡Fußenegger写道,他提供here。实现非常简单,我在生产模式中使用StaticResourceVersionProvider。到目前为止我没有问题(现在我的客户坚如磐石)。

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

+0

甜。看起来我没有深入Stefan的网站。现在给它一个镜头。谢谢。 – 2011-05-29 12:37:50

0

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