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>

Ссылка:

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