Primefaces 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) мы используем тег ActionListener из a p:commandButton для вызова Java-метода в компоненте поддержки, который открывает диалоговое окно (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 Как очистить буфер в начале 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. К сожалению, мы не смогли развернуть наше приложение после того, как сделали это. Вся процедура описана здесь: Приложение Java EE 7 не развертывается на Glassfish 4 Sever после переключения с 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 КБ). Но главная страница слишком долго держит сервер занятым.

Итак, мы будем признательны за любые советы по этой теме.

Заранее большое спасибо.

0 ответов

Другие вопросы по тегам