Primefaces对话框架性能问题

时间:2014-03-19 16:12:50

标签: performance primefaces jsf-2 java-ee-7 dialog-framework

我们正在构建一个Java EE 7网站,并且在某些情况下遇到性能问题。

我们正在使用以下组件和技术: Java 1.7 JSF 2.2 EclipseLink 2.5.1 PrimeFaces 4.0 Glassfish Server 4.0 Advantage Database Server 10.10

那么,我们的问题到底是什么?在我们的主页面(围绕大约2000个DOM元素,主要是JSF和Primefaces元素)中,我们使用ap:commandButton的actionListener-Tag来调用支持bean中的Java方法,该方法打开了primefaces对话框架的对话框(JaNeinDialog)。

由于我们的JaNeinDialog非常简单,我们希望它几乎可以立即在浏览器(firefox 27.0.1)中打开。但事实上,它可以看到1-2秒单位。

令人惊讶的是,我们发现,这个等待时间直接取决于调用它的原始位置:只要这个commandLink位于一个非常简单的xhtml页面中,我们就会看到我们所期望的:对话框几乎没有延迟打开。

所以问题是:为什么同一个对话框的加载时间取决于页面的复杂性和调用它的位置?

p:CommandButton调用Java方法以打开JaNeinDialog:

<p:commandLink ajax="true" process="@this"
actionListener="#{patientController.starteMitarbeiterSucheDialog()}">
<p:graphicImage value="/resources/img/png/find_1.png" width="18"
height="21" title="Suche nach Mitarbeiter" />
<p:ajax event="dialogReturn" update="editPflegeDatenPanel"
listener="#{patientController.setPatientMitarbeiter}" />
</p:commandLink>

JaNeinDialog.xhtml:

 <!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title><h:outputText
value="#{stringKonstanten.jaNeinDialogTitel}"/></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
<h:outputStylesheet library="css" name="jortho.css" />
</h:head>
<h:body>
<h:form>
<center>
<p:panelGrid id="JaNeinDialogPanel" cellspacing="5">
<p:row>
<p:column colspan="2">
<center>
<h:outputText value="#{jaNeinDialogController.dialogText}" />
</center>
</p:column>
</p:row>
<p:row>
<p:column colspan="2">
<center>
<h:outputText value="Aktion ausführen?" />
<BR />
<BR />
</center>
</p:column>
</p:row>
<p:row>
<p:column>
<center>
<p:commandButton id="positiveButton"
actionListener="#{jaNeinDialogController.entscheidungWeiterleiten(true)}"
value="#{stringKonstanten.ja}" icon="ui-icon-check" />
<p:commandButton id="negativeButton"
actionListener="#{jaNeinDialogController.entscheidungWeiterleiten(false)}"
value="#{stringKonstanten.nein}" icon="ui-icon-close" />
</center>
</p:column>
</p:row>
</p:panelGrid>
</center>
</h:form>
</h:body>
</ui:composition>

使用过的JSF版本是标准的Mojarra 2.2.0实现,它与Glassfish 4服务器一起提供。

我们还检查过,在body部分中没有加载脚本。只有2个脚本 装在头部。

尝试冲洗的建议,我们遵循BalusCs的建立 How to flush buffer early in JSF 2.0? in 为了减少响应的等待时间。实际上,这个等待时间减少了 大约150毫秒,但出现了一些奇怪的副作用。由于BalusC不推荐 使用这种方法,我们恢复了这种变化。

使用Firefox插件YSlow,我们测量了对话框出现之前的响应时间。第一个元素的等待时间(main.xhtml) 等待时间超过800毫秒。但是第一个元素的大小只是 987 B.那么,我们如何才能发现第一个元素的等待时间到底发生了什么?

我们从https://blog.oio.de/2013/05/06/jsf-performance-tuning/学到了改变 从Mojarra到MyFaces的JSF实施将显着提高性能,我们将 现在尝试在我们的Glassfish Web服务器上更改它。

我们非常感谢任何帮助。非常感谢提前!

更新:

与lu4242建议一样(非常感谢您的帮助!),我们尝试将JSF实现从Mojarra 2.2.0更改为MyFaces。 不幸的是,在我们这样做之后,我们无法部署我们的应用程序。整个过程在这里描述: Java EE 7 Application not deploying on Glassfish 4 Sever after switching from Mojarra to MyFaces

之后,我们从http://blog.oio.de/2013/05/16/jsf-performance-mojarra-improves-dramatically-with-latest-release/学习 自Mojarra版本2.1.22以来,已经修复了具有大量DOM元素的站点的巨大性能损失。

因此我们将Mojarra从版本2.2.0更新为2.2.6,但我们的等待时间仍未改善。无论我们在主页上做什么,我们仍然有大约700毫秒的等待时间。

YSlow表明,从服务器传输到浏览器的数据大小很小(小于10KB)。但是主页面使服务器忙碌了很长时间。

所以,我们将不胜感激这个话题。

提前多多感谢。

0 个答案:

没有答案