在JSF 2.0中,进行非AJAX提交之间是否存在任何重大技术差异,例如:以及“@all”AJAX提交,例如?
用户不会从AJAX风格的提交中感知页面刷新,但是其他任何技术上的重要事件都会发生吗?是否将较少的数据提交回服务器? JSF生命周期的任何元素是否与AJAX和非AJAX提交不同?
答案 0 :(得分: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必须解析XML响应中的所有HTML并用它替换DOM,尽管现在使用快速机器对性能的影响几乎可以忽略不计。
但是,实际上,@all
在视觉上比同步回发更快,因为没有任何"flash of content"的方法。
请注意,@all
在PrimeFaces中长时间不受支持,因为它“从根本上说是错误的”(引用PrimeFaces的领先优势),但在OmniFaces FullAjaxExceptionHandler
之后,PrimeFaces的领导已经改变了想法并得到了支持PrimeFaces 3.2及以上。