在JSF 2.0中,執行非AJAX提交例如和「@all」AJAX提交例如?JSF非AJAX提交和「@all」AJAX提交之間的任何重大技術差異?
用戶不會從AJAX風格的提交中感知頁面刷新,但是在技術上有什麼其他意義發生?少數據被提交回服務器? JSF生命週期中的任何元素與AJAX還是非AJAX提交都有所不同?
在JSF 2.0中,執行非AJAX提交例如和「@all」AJAX提交例如?JSF非AJAX提交和「@all」AJAX提交之間的任何重大技術差異?
用戶不會從AJAX風格的提交中感知頁面刷新,但是在技術上有什麼其他意義發生?少數據被提交回服務器? JSF生命週期中的任何元素與AJAX還是非AJAX提交都有所不同?
從技術上講,@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 /螢火蟲/ IE9 Web開發工具集的「網絡」或「網絡」部分你可以通過按F12得到)
因此總是比同步響應多250字節。而且,後處理有一些開銷,因爲JavaScript必須從XML響應中解析出所有HTML,並用它來替換DOM,儘管現在快速機器對性能的影響幾乎完全可以忽略不計。
然而,在實踐中,@all
出現視覺上的速度比同步回發,因爲沒有任何"flash of content"的手段。
注意@all
是不支持在PrimeFaces長,因爲它是「根本錯誤」(舉了PrimeFaces導致),但OmniFaces FullAjaxExceptionHandler
之後,PrimeFaces領先優勢已經改變了主意,它是從PrimeFaces 3.2和支持。
很高興我問 - 非常有用的知識。謝謝,一如既往,BalusC。 – BestPractices
不客氣。 – BalusC