我有一个非常长的基于xpage的表单,需要完成,所以我决定将其分解为一组面板,每个面板是否根据复选框组中的选中值进行渲染。
我的问题是,使用较大的面板(包含30个左右的字段)需要20秒钟以上的时间,才能对复选框字段的onchange事件处理程序进行部分刷新。我以为这只是内容的数量,但是如果我从所有面板中完全删除渲染公式,则包括所有面板内容在内的整个表单最初会在几秒钟内显示出来。
结构为:
<xp:panel id="allPanels">
<xp:panel id="panel1"></xp:panel>
<xp:panel id="panel2"></xp:panel>
<xp:panel id="panel3"></xp:panel>
</xp:panel>
使用onchange事件刷新“ allPanels”。
有人知道为什么会有这样的延迟吗?
非常感谢
答案 0 :(得分:1)
@DbLookup的性能特别糟糕,您会在各种博客文章中看到这一点。例如,请参见xPages @DbLookup issue。不使用公式语言的API会具有更好的性能-XPages中没有公式语言引擎,一切都是Java。 SSJS映射到Java方法; @DbLookups映射到多个 Java方法(用于每个参数)。
另请参阅我的网络研讨会“玛蒂,您不是在第四度思考”(http://www.tlcc.com/admin/tlccsite.nsf/pages/recorded-xpages-webinars的2016网络研讨会选项卡)。何时计算是我多年来讨论过的一个话题,它确切地解释了为什么它在初始加载时更快。有多种提高性能的选项。最好是“按页面加载计算”而不是“动态计算”。 view.isRenderingPhase()
可以在适当的情况下用于最大程度地减少计算量。另一种选择是在onClick中运行代码以设置viewScope变量并引用它们,而不是在原地运行查找。
答案 1 :(得分:0)
您可以尝试将execId="YOURCHECKBOXFIELDID"
添加到复选框组的事件处理程序中,该事件处理程序仅将复选框的值发送到服务器以进行部分刷新,而不是所有其他字段。
还要看看我在这里对类似问题的回答:Complex Xpage takes long for partial refreshs可能有帮助吗?
事实上,我刚刚注意到Knut提到了execId点也是对上述问题的回应!