1

JSF 2.0では、非AJAX送信などと「@all」AJAX送信などの間に重要な技術的な違いはありますか?

ユーザーはAJAXスタイルの送信からのページの更新を認識しませんが、技術的に重要な他の何かが起こっていますか?サーバーに送信されるデータが少なくなっていますか?JSFライフサイクルの要素は、AJAX送信と非AJAX送信で異なりますか?

4

1 に答える 1

1

技術的に@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以降でサポートされています。

于 2012-05-09T15:38:00.607 に答える