显示具有大量字段的组时,Orbeon页面呈现缓慢

时间:2011-09-08 12:01:25

标签: orbeon xforms performance-testing

我正在研究Orbeon表格,我有一个与性能相关的问题,如下所述。

我有一个表格,我最初有五个字段。在第五个下拉字段中,如果我选择“是”,由于xforms:group它显示一个字段块(该块有大约40个字段)。 由于块在重复部分,我可以添加/删除尽可能多的块。

现在,如果我添加10个块,当我将第五个下拉字段从任何值切换为“是”时,显示所有块需要2秒以上。

我在Windows XP桌面上使用Orbeon Forms 3.8和Tomcat 6,内存为2GB。

请让我知道选择“是”时会发生什么(意味着当xforms:group为true时条件显示),这会花费更多时间来显示。

<xforms:group ref=".[instance('form-attributes')/flag='yes']" >
    //code for the controls here
</xforms:group>

2 个答案:

答案 0 :(得分:1)

如果您使用的代码如下:

<xforms:group ref=".[condition]">
    <!-- Large number of fields -->
</xforms:group>
  1. condition为false时,组内的字段不相关。 XForms引擎不会计算它们的值,只读状态,有效性,标签,提示,帮助,警报等。
  2. condition成立时,组的内容变得相关,XForms引擎会评估组内的所有控件。
  3. 浏览器需要将所有这些更改应用于DOM。
  4. 通常,步骤#2比#3快得多,特别是对于IE7。为了避免步骤#3的大量更新,编写此代码的另一种方法是:

    <xhtml:div class="{if (condition) then '' else 'xforms-disabled'}">
        <!-- Large number of fields -->
    </xhtml:div>
    

    有了这个,div内的字段将永远是相关的:

    • 好处是,当condition成为现实时,浏览器可能需要做的就是在div上翻转该类。它不一定需要更新内部的所有控件,除非它们的值也发生了变化。
    • 缺点是虽然condition为false,但服务器上的XForms引擎需要保持div内的所有控件都是最新的。

    但通常情况下,尤其是当您看到IE7的速度变慢时,您在客户端上获得的性能远远超过服务器上可能需要的增加的处理。

答案 1 :(得分:0)


我发现此link似乎建议使用span标记而不是div标记,尽管最初的帖子是代码崩溃,建议的工作在我的表单中提供了一些小的性能改进在IE中测试它。希望这段代码能给你带来一些好处。