JSF非AJAX提交和“@all”AJAX提交之间的任何重大技术差异?

时间:2012-05-09 15:13:33

标签: ajax jsf-2 rendering

在JSF 2.0中,进行非AJAX提交之间是否存在任何重大技术差异,例如:以及“@all”AJAX提交,例如?

用户不会从AJAX风格的提交中感知页面刷新,但是其他任何技术上的重要事件都会发生吗?是否将较少的数据提交回服务器? JSF生命周期的任何元素是否与AJAX和非AJAX提交不同?

1 个答案:

答案 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及以上。