我的 JSF/RichFaces/Facelets ajax 请求遇到性能问题,据我所知,因为每个 ajax 请求都会重建整个组件树。即使我使用 ajaxSingle=true、在 a4j:region 中包装部分、声明一个用于重新渲染的部分或根本不声明一个部分,也会发生这种情况。我们的页面是一个具有许多嵌套级别的动态页面。该页面可能包含大约 800-900 个字段(inputText、丰富的日历、selectOneMenus 等)。初始加载时间是一个问题,但我理解这个问题,它有很多字段。一旦我们有了初始构建/渲染时间,尽管我们已将所有其他操作设计为 ajax,并且仅重新渲染所需的内容。从 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
我不确定我们正在做的事情是否会导致整个组件树的重建,或者 Facelets 是否出于某种原因确定了这种需求(过时的缓存?)。这是我们的堆栈:
JBoss 5.1
JSF 1.2
丰富的面孔。 3.3.3.最终
小面 1.1.15
接缝2.1.2
我尝试添加一些上下文参数来查看它们是否有帮助,但它们什么也没做:
facelets.BUILD_BEFORE_RESTORE = false
facelets.REFRESH_PERIOD = -1 或 5(如 5 分钟)
有没有办法判断我们的视图是否被正确缓存?我们不提供状态保存方法,所以我相信它默认为服务器端。我们所有的请求都发生在长时间运行的对话中。我不确定这是否是一个因素,因为我认为视图会在会话级别缓存?任何帮助将不胜感激,谢谢。
更多调试后更新:
AjaxViewHandler(具有 FaceletsViewHandler 的成员变量)设置了developmentMode=true。我不确定这是否会导致 Facelet 不缓存任何视图,因此任何更改都会在开发周期中刷新......?很难找到有关 Facelets/JSF 视图缓存及其行为和控制的任何信息。此外,当我添加配置参数时:
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>
这个没拿!在调试器中我仍然看到 true 设置。由于我们有很多子视图我也尝试过
com.sun.faces.numberOfLogicalViews 和
com.sun.faces.numberOfViewsInSession
从 15(默认)增加到 1000,这没有效果。
我还尝试更改为客户端状态保存,但没有任何运气。没有想法了……希望有人能帮忙……
似乎 Seam 2.1 自动初始化 RichFaces,我不确定这是否与它有关......