мы создаем веб-сайт 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) мы используем actionListener-Tag p:commandButton для вызова метода Java в компоненте поддержки, который открывает диалог (JaNeinDialog) диалогового фреймворка Primefaces.
Поскольку наш 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 не загружаются скрипты. В разделе head загружаются только 2 скрипта.
Пробуя предложение с очисткой, мы следовали инструкциям BalusC в Как очистить буфер раньше в JSF 2.0?, чтобы сократить время ожидания ответа. Действительно, это время ожидания уменьшилось примерно на 150 мс, но сопровождалось некоторыми странными побочными эффектами. Поскольку BalusC не рекомендует использовать этот подход, мы отменили эти изменения.
Используя Firefox-плагин YSlow, мы измерили время отклика до появления диалогового окна. Время ожидания первого элемента (main.xhtml) занимает более 800 мс. Но размер этого первого элемента всего 987 байт. Так как же узнать, что именно происходит во время ожидания первого элемента?
Мы узнали из https://blog.oio.de/2013/05/06/jsf-performance-tuning/ что изменение реализации JSF с Mojarra на MyFaces значительно повысит производительность, и мы попытаемся изменить ее прямо сейчас на нашем веб-сервере Glassfish.
Мы будем очень признательны за любую помощь. Заранее большое спасибо!
ОБНОВИТЬ:
Как было предложено в lu4242 (большое спасибо за вашу помощь!), мы попытались изменить реализацию JSF с Mojarra 2.2.0 на MyFaces. К сожалению, после этого мы не смогли развернуть наше приложение. Вся процедура описана здесь: mo">Приложение Java EE 7 не развертывается на сервере Glassfish 4 после перехода с Mojarra на 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 показывает, что размер данных, передаваемых с сервера в браузер, минимален (менее 10 КБ). Но главная страница слишком долго загружает сервер.
Итак, мы будем признательны за любые дополнительные советы по этой теме.
Заранее большое спасибо.