Любая существенная техническая разница между JSF non-AJAX submit и "@all" AJAX submit?

В JSF 2.0 существует ли какая-либо существенная техническая разница между выполнением не-AJAX submit, например. и "@all" AJAX submit, например.?

Пользователь не будет воспринимать обновление страницы из представления в стиле AJAX, но что-нибудь еще технически значимое? Чем меньше данных возвращается на сервер? Представлены ли какие-либо элементы жизненного цикла JSF с AJAX или non-AJAX?

Ответы

Ответ 1

Технически, @all работает медленнее, чем синхронная обратная передача. Нет никакой разницы в рендеринге HTML во время отклика рендера, но в ответе ajax имеется немного больше данных, потому что ответ ajax отправлен как XML-документ с обновленным HTML как блок CDATA. В ответ на весь вывод HTML добавляются следующие данные:

<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
    <changes>
        <update id="javax.faces.ViewRoot">
            <![CDATA[
                HTML output here.
            ]]>
        </update>
        <update id="javax.faces.ViewState">
            <![CDATA[5778819104895950876:-4716773626508512118]]>
        </update>
    </changes>
</partial-response>

(вы можете увидеть его непосредственно в разделе "Сеть" или "Сеть" набора инструментов веб-разработчиков в Chrome/Firebug/IE9, который вы можете получить, нажав F12)

Таким образом, всегда ~ 250 байтов больше, чем синхронный ответ. Кроме того, есть некоторые накладные расходы в постобработке, потому что JavaScript должен анализировать весь этот HTML из ответа XML и заменять DOM им, хотя влияние производительности практически полностью пренебрежимо мало в наши дни с быстрыми машинами.

Однако на практике @all появляется визуально быстрее, чем синхронная обратная передача, потому что нет никаких средств "flash of content" .

Обратите внимание, что @all долгое время не поддерживался в PrimeFaces, потому что он "в корне неверен" (для цитирования руководства PrimeFaces), но после OmniFaces FullAjaxExceptionHandler, руководство PrimeFaces изменило умы, и оно поддерживалось PrimeFaces 3.2 и далее.