代码之家  ›  专栏  ›  技术社区  ›  D.Bugger

xpages:在执行部分刷新时优化大型窗体

  •  0
  • D.Bugger  · 技术社区  · 6 年前

    我们有一个xpages应用程序,有很多表单。一切都是动态的,这意味着表单内容来自notes中的一个或多个表单定义文档(可以说我们构建了自己的“设计器”环境):字段是动态的,选项卡、列表等……现在,碰巧的是,我们有一个包含100多个字段的巨大表单,其中许多字段是下拉式的,有很多选项也是动态的。

    它能工作,但很慢。当下拉字段更改时,它会触发部分刷新并部分执行最近的选项卡。但是当我们查看日志时,部分执行会影响第一阶段的执行在呈现过程中,我们的Java代码重新计算整个表单和所有选项卡上的所有字段我们已经使用了阶段侦听器。

    @53.604:应用请求值,从遍历所有字段(~1s)开始,然后仅继续一个选项卡上的字段。到目前为止还不错。

    @55.057:流程验证,仅限选项卡杰出的。

    @55.338:更新_MODEL_值,仅限选项卡太棒了。

    @55.495:调用应用程序,仅选项卡很完美。

    @55.651:提交响应,处理整个表单。

    @59.121:处理结束

    我的问题是: 我们可以在代码中添加一些快捷方式,这样它就可以跳过对未更改的选项卡和字段的求值吗?

    例如,是否可以使用一些内置方法来确定xpages是否正在进行部分刷新,以及哪个元素的刷新?

    谢谢你的帮助。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Paul Stephen Withers    6 年前

    标签表在网络上不太好用,这也是原因之一。我建议重构,以便你的应用程序使用“向导风格”的方法,其中它是一个单独的xpage,每个选项卡上都有一个自定义控件,并且只加载一个自定义控件。这需要更改导航以重新加载页面,并使用某种后端方法来标识“草稿”(即,并非所有已访问和验证的选项卡)并完成。但它也消除了用户完成所有选项卡、提交和“保存”请求失败的风险,这意味着他们将丢失输入的所有内容。

    其他可能有好处的方法是使用动态内容控件一次加载一个选项卡(以前访问过的选项卡仍然在组件树中,但尚未访问的选项卡不会),或者使用execmode来限制服务器处理的内容。但是,您需要确保需要处理的所有内容都在execmode中,因此可能需要对页面进行一些重新组织。

        2
  •  0
  •   Patrick Kwinten    6 年前

    我在xpages中使用了常用的选项卡形式(bootstrap),并且没有遇到性能方面的问题。在我看来,要么是你在后台进行的计算,再加上形成瓶颈的字段数量。

    您是否使用xpages工具箱查看每次部分刷新时访问了多少后端对象(数据库、视图、文档)?