0

我正在处理 Orbeon 表单,我遇到了与性能相关的问题,如下所述。

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

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

我在具有 2GB RAM 的 Windows XP 桌面上使用 Orbeon Forms 3.8 和 Tomcat 6。

请告诉我在选择“是”时会发生什么(意味着当XForms:Group为True时的条件显示),这需要更多时间才能显示。

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

2 回答 2

1

如果您使用的代码如下所示:

<xforms:group ref=".[condition]">
    <!-- Large number of fields -->
</xforms:group>
  1. condition为 false 时,组内的字段不相关。XForms 引擎不计算它们的值、只读状态、有效性、标签、提示、帮助、警报等。
  2. condition为真时,组的内容变得相关,XForms 引擎评估组内的所有控件。
  3. 浏览器需要将所有这些更改应用到 DOM。

通常,第 2 步比第 3 步快得多,尤其是在 IE7 中。为避免步骤 #3 中的大量更新,编写此代码的另一种方法是:

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

有了这个,里面的字段div总是相关的:

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

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

于 2011-10-11T17:01:16.003 回答
0


我发现这个链接似乎建议使用span标签而不是div标签,虽然最初的帖子是针对代码崩溃的,但是当我在 IE 中测试它时,建议的解决方法给我的表单带来了小的性能改进。希望这段代码能给你带来一些好处。

于 2011-09-13T12:36:48.447 回答