1

在 JSF 2.0 中,进行非 AJAX 提交(例如)和“@all”AJAX 提交(例如)之间是否存在显着的技术差异?

用户不会从 AJAX 样式的提交中感知到页面刷新,但是否发生了其他技术上重要的事情?提交回服务器的数据是否更少?AJAX 与非 AJAX 提交的 JSF 生命周期的任何元素是否不同?

4

1 回答 1

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 中的 Web 开发人员工具集的“Net”或“Network”部分自行查看,您可以通过按 F12 获得)

因此,这总是比同步响应多约 250 个字节。此外,后处理也有一些开销,因为 JavaScript 必须从 XML 响应中解析出所有 HTML 并用它替换 DOM,尽管这些天对于快速机器的性能影响实际上完全可以忽略不计。

然而,在实践中,它@all 看起来比同步回发更快,因为没有任何“内容闪存”的手段。

请注意,这@all在 PrimeFaces 中长期不受支持,因为它“根本上是错误的”(引用 PrimeFaces 线索),但在OmniFacesFullAjaxExceptionHandler之后,PrimeFaces 线索改变了主意,并且它受到 PrimeFaces 3.2 及更高版本的支持。

于 2012-05-09T15:38:00.607 回答