Я использую реализацию Mojarra JSF (версия 2.2.1). У меня есть большая проблема с производительностью во время запросов ajax.JSF ajax проблема с производительностью при использовании большого количества компонентов
На моей странице много компонентов, поэтому я понимаю, почему первый рендеринг занимает много времени, но что с помощью ajax-запросов?
Они занимают много времени, хотя почти ничего не делают. Вот мой упрощенный пример:
В приведенном ниже примере, нажав кнопку «тест производительности» занимает несколько мс:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
Hello World
<h:form>
<h:commandButton value="performance test">
<f:ajax execute="@this" render="@none" />
</h:commandButton>
</h:form>
</h:body>
</html>
Но если добавить 1000 <h:inputText />
элементов в <h:form></h:form>
то же действие происходит над 100мс!
Я проверил, что 80% времени потребляется в фазе RESTORE_VIEW, 20% в фазе RENDER_RESPONSE, остальная часть фаз не занимает значительного времени.
Есть ли возможность исправить это?
Я также попытался отключить javax.faces.PARTIAL_STATE_SAVING (потребление памяти не проблема в моем случае), но и без каких-либо успехов.
РЕДАКТИРОВАТЬ: Тысяча <h:inputText>
добавляют к <h:form>
только упрощенный пример. Я просто хотел подчеркнуть тот факт, что большое количество компонентов оказывает существенное влияние на запрос ajax (что почти ничего не делает), что является серьезной проблемой на моем сайте.
В реальности, конечно, у меня нет 1000 входов. Я показываю очень большую таблицу с большим количеством данных - если данные пусты в любой ячейке, то вместо этого должен быть дефис. Я использовал композитный компонент для этого - где у меня было более одного ui:fragment
с render=true/false
Сегодня я попытался использовать свой собственный компонент вместо составного, а время отклика и использование памяти уменьшились.
Но я все еще не удовлетворен тем, что мой очень простой запрос ajax на этой странице занимает гораздо больше времени, чем тот же самый запрос ajax, который используется на другом - более тонкая страница (т. Е. С меньшим количеством компонентов). Разве это не проблема архитектуры JSF?
100 мс для формы монстра с полями ввода 1К очень аккуратно. С другой стороны, мне интересно, кто когда-либо заполняет такую форму монстра. Возможно, вам нужно ввести некоторую систему поиска/фильтрации, как это делает Google? Google также не показывает все результаты за один раз без какой-либо формы поиска/фильтрации. – BalusC
Можно ли переключить реализацию JSF на MyFaces? Согласно этому блогу http://blog.oio.de/2013/04/08/jsf-comparison-myfaces-vs-mojarra/ реализация (Mojarra vs MyFaces) оказывает влияние на большие деревья компонентов. – cheffe
@BalusC: Спасибо за ваш ответ. См. Раздел редактирования в моем вопросе. Я уточнил описание моей проблемы. – chrosciu