【问题标题】:JSF Richfaces frontend performance tuningJSF Richfaces 前端性能调优
【发布时间】:2010-10-27 20:32:33
【问题描述】:
我使用 MyFaces 1.2.6 和 Richfaces 3.3.1GA(刚刚升级)开发了一个 Web 应用程序。
尽管易于使用,但我发现 Richfaces 组件非常慢。
我还发现他们并没有真正利用浏览器缓存机制,他们在每次请求和其他事情时都会发送一些糟糕的 JS 文件。
我真的很想应用“高性能网站”一书中描述的一些规则,但我无法更改生成的 js 和 HTML 代码。
有人对使用 Richfaces 进行前端性能调整有一些技巧吗?
谢谢。
【问题讨论】:
标签:
java
javascript
performance
jsf
richfaces
【解决方案1】:
要添加到Damo,您还可以添加一个小过滤器来缓存此类js或图像以提高性能。但如果打算缓存的文件涉及频繁更新,请谨慎执行此操作。
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);
}
}
【解决方案2】:
您可以使用:
org.ajax4jsf.DEFAULT_EXPIRE
31536000
这样所有的js、css文件(由richfaces生成)在浏览器上缓存1年。
这确实提高了我们项目的速度。
另外,我们不用担心如果我们更改richfaces版本,因为当我们更改richfaces版本时,它会生成不同的文件。
【解决方案3】:
阅读this article。
您是否使用 Firebug + YSlow 来检查缓存中存储的内容?使用 web.xml org.richfaces.LoadScriptStrategy 设置,您可以告诉 Richfaces:
- 将所有脚本加载到一个文件中。
- 不加载任何脚本(您可以自己执行 - 例如,按照您书中规定的方式)。
- 在需要时加载脚本(默认)。
但是一些基本原则:
永远不要在你的 getter 中加入逻辑。
它们被多次调用并且
应该只返回一些东西
由另一种方法填充。为了
例如,如果您正在链接
下拉菜单一起使用
a4j:support 第一个标签
带有加载的动作属性
然后在何时检索的数据
你重新渲染第二个。
使用ajaxSingle="true" 除非
你实际上想发送整个
表单返回服务器。
如果你不使用丰富的组件
只需要一个普通的。例如
不要使用rich:dataTable,除非你
正在利用一些
它具有超越的功能
h:dataTable。