Ответ 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 и далее.