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
可以说“在恢复当前视图时只执行以下组件”?这是荒谬的吗?
谢谢!
答案 0 :(得分:0)
因此事实证明,在Mojarra中描述这一点有点困难。但是,MyFaces非常简单......在LifeCycleImpl简单指出你的探查器。
在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
组件。
OmniFaces缓存组件实际上是这样做的,但范围更广。
我仍然希望有人可以提出更科学的答案:)