我的JSF/RichFaces/Facelets ajax请求存在性能问题,而且我可以告诉它,因为整个组件树正在每个ajax请求上重建.即使我使用ajaxSingle = true,在a4j:区域中包装部分,声明单个部分进行重新渲染或根本不进行渲染,也会发生这种情况.我们的页面是一个包含许多嵌套级别的动态页面.该页面可能包含大约800-900个字段(inputText,富日历,selectOneMenus等).初始加载时间是一个问题,但我理解这个问题,它有很多领域.一旦我们有了初始构建/渲染时间,虽然我们已经将所有其他操作设计为ajax并且只需要reRender.从facelets调试日志我在任何ajax调用上看到这样的消息:
2011-08-24 22:19:03,054 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took
24445ms to build view: /oconsole/appfile.xhtml
2011-08-24 22:19:09,377 DEBUG [facelets.viewhandler] (http-0.0.0.0-8080-2) Took
6323ms to render view: /oconsole/appfile.xhtml
Run Code Online (Sandbox Code Playgroud)
我不确定我们正在做的事情是否导致整个组件树的重建,或者facelets是否正在确定由于某种原因(过时的缓存?)所需的这种需求.这是我们的堆栈:JBoss 5.1 JSF 1.2 RichFaces.3.3.3.Final Facelets 1.1.15 Seam 2.1.2
我尝试添加一些上下文参数来查看它们是否有用,但它们什么也没做:facelets.BUILD_BEFORE_RESTORE = false facelets.REFRESH_PERIOD = -1或5(如5分钟)
无论如何要告诉我们的观点是否正确缓存?我们没有delcare一个状态保存方法,所以我认为它默认为服务器端.我们所有的请求都发生在长时间运行的对话中.我不确定这是否会影响因为我认为视图会话缓存在会话级别?非常感谢任何帮助,谢谢.
更多调试后更新:
AjaxViewHandler(具有FaceletsViewHandler的成员变量)具有developmentMode = true set.我不确定这是否会导致facelets不缓存任何视图,因此任何更改都会在开发周期中刷新...?很难找到关于facelets/JSF缓存视图以及行为和控制的任何信息.此外,当我添加配置参数时:
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
这没用!在调试器中,我仍然看到真正的设置.由于我们有很多子视图,我还尝试了com.sun.faces.numberOfLogicalViews和com.sun.faces.numberOfViewsInSession从15(默认值)到1000,这没有任何效果.
我也试过改变客户端状态保存没有任何运气.耗尽了想法......希望有人可以提供帮助....
似乎Seam 2.1自动初始化了RichFaces,我不确定它是否与它有关.....