我使用MyFaces 1.2.6和Richfaces 3.3.1GA开发了一个Web应用程序(刚刚升级)。 尽管易于使用,但我发现Richfaces组件非常慢。
我还发现他们并没有真正利用浏览器缓存机制,他们不断发送一些糟糕的JS文件,每个请求和其他东西。 我真的想应用“High PErformance WEbsites”一书中描述的一些规则,但我无法更改de generated js和HTML code。
有没有人对使用Richfaces进行前端性能调整有一些提示?
感谢。
答案 0 :(得分:12)
阅读this article。
您是否正在使用Firebug + YSlow来检查缓存中存储的内容?使用web.xml org.richfaces.LoadScriptStrategy
设置,您可以告诉Richfaces:
但是一些基本原则:
永远不要将逻辑放入吸气剂中。
它们被多次调用
应该只返回一些东西
由另一种方法填充。对于
例如,如果你是链接
下拉使用一起
第一个a4j:support
标记
带有一个加载的动作属性
然后检索的数据
你是第二个人。
除非使用ajaxSingle="true"
你真的想发送整个
返回服务器。
如果您使用,请不要使用丰富的组件
只需要一个正常的。例如
除非你,否则不要使用rich:dataTable
正在利用一些
它具有超越的功能
h:dataTable
。
答案 1 :(得分:0)
您可以使用: org.ajax4jsf.DEFAULT_EXPIRE 31536000
这样所有js,css文件(由richfaces生成)都会在浏览器上缓存1年。 这确实提高了我们项目的速度。
此外,我们无需担心如果我们更改richfaces版本,因为当我们更改richfaces版本时它会生成不同的文件。
答案 2 :(得分:0)
要添加到Damo,您还可以添加一个小过滤器来缓存此类j或图像以提高性能。但是,如果要进行缓存的文件涉及频繁更新,请谨慎行事。
private void cacheImages(HttpServletRequest request,
HttpServletResponse response) {
try {
String requestPath = request.getRequestURI();
if (requestPath != null) {
if (requestPath.contains("/images/")
|| requestPath.contains("/scripts/")
|| requestPath.endsWith(".js")
|| requestPath.endsWith(".gif")) {
response.setHeader("Cache-Control", "max-age=36000");
}
}
} catch (RuntimeException e) {
// do nothing except log
Log.error(this, e);
}
}