JSF2.0 buildView()和f:ajax性能

时间:2012-07-11 15:56:32

标签: java java-ee jsf-2 facelets

JSF2.0是一个了不起的Web框架;虽然Rails / DJango / Play基本上都使用带有变量替换的模板(basicaly JSP),但JSF2.0更像是基于组件的框架,如Tapestry,GWT和Wicket。

但是,由于页面的复杂性,JSF具有线性降级性能。所以在阅读了一篇引人入胜的文章之后: http://industrieit.com/blog/2011/11/stateless-jsf-high-performance-zero-per-request-memory-overhead我有几个问题。

首先,作者说,JSF生命周期中的大部分时间花在buildView()上。如何在特定的应用程序中对此进行分析,特别是在Mojarra中运行的应用程序?

第二,自由使用f:ajax execute=""帮助buildView()表现? execute属性是否会减少buildView()必须执行的工作量?

最后,在整页导航中,是否有等效的f:ajax可以说“在恢复当前视图时只执行以下组件”?这是荒谬的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 因此事实证明,在Mojarra中描述这一点有点困难。但是,MyFaces非常简单......在LifeCycleImpl简单指出你的探查器。

  2. 在MyFaces上,正确设置执行会带来巨大的性能提升。在我的机器上,buildView()样板需要大约8毫秒。对于在f:ajax execute=中处理的每个组件,都会为该基础添加线性成本。我在h:outputText围绕的ui:repeat中添加了10,000 ui:fragment id="fragment"。当我将fragment添加到f:ajax execute=时,我从8毫秒响应时间到45毫秒响应时间。这里的教训是仅将f:ajax execute=设置为仅执行输入组件,而f:ajax render=仅设置h:message组件。

  3. OmniFaces缓存组件实际上是这样做的,但范围更广。

  4. 我仍然希望有人可以提出更科学的答案:)