Rod*_*nez 13 performance jsf primefaces jsf-2
我正在使用JSF 2.2 + Primefaces开发WebApp ...项目正在快速增长,并且第一次性能测试非常差(由于我对JSF LifeCylce在非功能性需求方面的知识不足 - 即完全是ajax网站),然后我们可以改善一点,但结果仍然不如预期.(根据动作,我们有300~1500毫秒的时间,想法是性能大约500毫秒,给予或采取).主要是恢复视图阶段和渲染响应是消费者(在其他情况下,花费的时间毫无价值)的时间.对于某些操作,Invoke Aplication也需要时间(由于DB调用).
在网上阅读了很多文章后,有很多很棒的技巧要考虑(当然很多来自stackoverflow),例如:
- 改善数据库查询
我们有一些复杂的,用两个Hibernate Criterias查询完成,所以我们在这里工作.(也许使用纯SQL查询,复杂的查询使用子查询?)
- 永远不要在Bean的getter上定义业务逻辑
得到它了!
- 将适当的范围设置为bean并在其上存储只不过是必要的东西
我们有一个完整的ajax站点,所以View Scoped几乎就像Session Scoped一样,我们使用SessionBeans作为一种'Cache'来存储我们不希望每次都从DB获取的关键数据+定义业务逻辑这里.
- 选择正确的JSF状态保存方法 - 客户端Vs服务器
为此,我需要进行更多的研究,检查各种可能性的优缺点,然后测试每一种的可能性.
到目前为止非常清楚,现在一些额外的提示我对此有些怀疑.
- 尽可能使用vanilla HTML,最好使用h:标签而不是p:标签
简单的HTML是清楚的,有意义的,现在在h:和p之间:它值多少钱?例如.
<p:commandButton value="Value"
styleClass="class"
actionListener="#{myBean.doStuff()}"
ajax="true" process="@form" update="@form"
onsuccess="jsFunction()" />
Run Code Online (Sandbox Code Playgroud)
VS
<h:commandButton value="Value"
styleClass="class"
actionListener="#{myBean.doStuff()}" >
<f:ajax execute="@form" render="@form" event="onclick" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
要么
<ui:fragment... vs <p:fragment...
Run Code Online (Sandbox Code Playgroud)
要么
<p:outputLabel value="#{myBean.value}" rendered="#{myBean.shouldRender}" />
Run Code Online (Sandbox Code Playgroud)
VS
<ui:fragment rendered="#{myBean.shouldRender}">
<label>#{myBean.value}</label>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
我一直在使用Primefaces和Jsf标签以及一些简单的HTML混合使用了一段时间.(主要是PF由于其组件的功能)我现在普通的HTML总是会更快,但在JSF和另一个框架之间?如果我这样做,改变它将花费大量时间,我不希望知道它的结果根本没有相关的差异.
- 自定义Facelets标记与复合组件
我认为这是关键.对它们的差异仍有一些疑问,在两者的实现上,CC使用起来非常简单和灵活,但缺点是它们完全包含在ViewTree和JSF为每个请求重新生成(如果我没有记错的话) ,而自定义标签使用起来似乎有点复杂(不是那么多),但其优势在于ViewTree上只包含了实际呈现的内容,仅此而已,使RESTORE VIEW更省时.我们有几个复合组件,没有Facelets标签,所以这里要做很多工作.我还没有找到一篇很好的文章解释它们之间的差异,当一个应该被使用时和另一个(已经读过输入,消息使用TAGS和更复杂的东西CC).如果想要更喜欢标签与CC,那么我将没有选择而不是使用CC?在CC中使用自定义标签是否可以使它们更轻松地用于处理它们?
我即将进入修改孔项目的旅程,以获得更好的性能,这将花费我几天的时间,想法是这次获得更好的结果; 所以每个提示,建议和建议都非常欢迎!谢谢你们的时间!
半年前我也遇到过同样的问题。大部分时间花在RestoreView和RenderResponse阶段。如果您的问题相同,那么您无能为力:
partialSubmit="true"尽可能多地使用execute(或 PrimeFaces process) 属性来减少服务器端的处理在我的特定情况下,我有很多没有输入控件的动态 html,并且我使用复合组件作为条件渲染的模板。为了提高性能,我使用freemarker生成动态 html。
附言。我的意见是,如果我们有包含许多组件的复杂页面,则不要使用 JSF。我认为Tapestry对此进行了更优化。它不会像 JSF 那样针对每个请求重新创建组件。
| 归档时间: |
|
| 查看次数: |
15182 次 |
| 最近记录: |