Primefaces RemoteCommand временная задержка при вызове bean-компонента
У меня проблема с производительностью с запаздыванием по времени метода вызывающего компонента RemoteCommand.
Используя primefaces 4.0, наша страница xhtml во время выполнения загружает значительное количество элементов в панель
<p:outputPanel id="runtime_panel" autoUpdate="true" />
У некоторых элементов управления SelectOneRadio есть слушатели через метод setOnchange(). Они вызывают RemoteCommand, который определяется на странице xhtml во время разработки:
<p:remoteCommand name="ourRemoteCommand"
actionListener="#{bean.someMethod}" update="runtime_panel"
/>
Цель bean.someMethod - показать или скрыть определенные элементы управления GUI на нашей странице через ajax. Боб - область запроса.
Проблема в том, что при вызове bean.someMethod из клиента прошло определенное временное отставание. В моих тестах javascript реагировал внезапно, но при перехвате bean.someMethod через точку останова на стороне сервера происходит довольно длительное отставание - около 2,5 секунд.
Я также изменяю область действия bean-компонента на область видимости сеанса, чтобы устранить задержку на этапе строительства, но это не проблема для швов - это не решает задержку во времени.
Если в " runtime_panel " есть только небольшое количество элементов, я не заметил какой-либо задержки, и точка останова немедленно останавливается в "bean.someMethod". Существует корреляция между количеством элементов управления и временем отклика.
Я также создаю еще один тест - поместите фиктивную RemoteCommand в начале страницы в своей форме.
<form>
<p:remoteCommand name="rcgg" partialSubmit="true" process="@this" update="@none" actionListener="#{bean.testMethod()}" />
<h:outputText id="msgs" value="Ajax Submit" />
<p:commandButton type="button" onclick="console.log('client start');rcgg('ddd');console.log('client end')" value="Ajax1" icon="ui-icon-refresh" />
</form>
Итак, код на стороне сервера также выполняется немедленно. Но когда "outputPanel" имеет много элементов графического интерфейса, есть также временная задержка, когда серверная часть начинает выполняться, даже если нет никакого отношения к этому RemoteCommand "rcgg". Странный.
Я также протестировал несколько атрибутов RemoteCommand (
immediate="false" async="true" partialSubmit="true" ignoreAutoUpdate="true" process="@none" global="false"
update="@none"
) но безуспешно тоже.
Я не имею ни малейшего представления, как избавиться от этой "задержки вызова бобов".
Мне действительно нужна твоя помощь.
2 ответа
Обычно вы должны использовать process=@this
на p:remoteCommand
или же он представит весь h:form
и его компоненты.
Так что лучше сохранить p:remoteCommand
в отдельности h:form
,
Если это также не работает, вы всегда можете использовать RequestContext
"s update
метод на ManagedBean для обновления компонента.
RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE")
Этот прием ускоряет загрузку содержимого вашей страницы с помощью remoteCommand.
Пример использования Primefaces RemoteCommand:
<p:remoteCommand name="load_users"
process="@this"
update="@form"
actionListener="#{myBean.loadUsers}" />
name
атрибут p:remoteCommand
это код JavaScript без тела, который инициирует весь процесс. actionListener
через вызов myBean.loadUsers компонента поддержки загружает данные и вызывает частичное обновление в форме (@form
) или идентификатор атрибута вашего целевого компонента.
Фрагмент JavaScript ниже - это обычное явление во многих кодах jQuery. Это обработчик для события, готового для jQuery. Это называет наш load_users()
Функция JavaScript, установленная как name
атрибут remoteCommand
, когда страница готова к дальнейшим манипуляциям. На этом этапе страница начала отображаться и уже стала видимой для пользователя. Вы должны будете включить это в начальный раздел страницы.
<script type="text/javascript">
$(document).ready(function() {
load_users();
});
</script>