JSF 2.0では、非AJAX送信などと「@all」AJAX送信などの間に重要な技術的な違いはありますか?
ユーザーはAJAXスタイルの送信からのページの更新を認識しませんが、技術的に重要な他の何かが起こっていますか?サーバーに送信されるデータが少なくなっていますか?JSFライフサイクルの要素は、AJAX送信と非AJAX送信で異なりますか?
技術的に@all
は、同期ポストバックよりも低速です。レンダリング応答中のHTMLレンダリングに違いはありませんが、ajax応答は更新されたHTMLをCDATAブロックとしてXMLドキュメントとして送信されるため、ajax応答にはわずかに多くのデータがあります。次のデータは、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>
(F12キーを押すと取得できるChrome / Firebug / IE9のWeb開発者ツールセットの[ネット]または[ネットワーク]セクションで自分で確認できます)
したがって、これは常に同期応答よりも約250バイト多くなります。また、JavaScriptはXML応答からすべてのHTMLを解析し、DOMをそれに置き換える必要があるため、後処理にはいくらかのオーバーヘッドがありますが、最近の高速マシンではパフォーマンスへの影響はほとんどありません。
ただし、実際には、「コンテンツのフラッシュ」の手段がないため、同期ポストバックよりも視覚的に高速に@all
表示されます。
これ@all
は「根本的に間違っている」(PrimeFacesリードを引用する)ため、PrimeFacesでは長い間サポートされていませんでしたが、OmniFacesFullAjaxExceptionHandler
の後、PrimeFacesリードの考え方が変わり、PrimeFaces3.2以降でサポートされています。