XPage:在进行部分刷新时优化大型表单

我们有一个 XPage 应用程序,有很多表单。一切都是动态的,这意味着表单内容来自 Notes 中的一个或多个表单定义文档(可以说我们构建了自己的“设计器”环境):字段是动态的,选项卡,列表等......现在,正如它发生的那样,我们有这个巨大的表单,有一百多个字段,其中许多是下拉的,有很多也是动态的选项。

它有效,但速度很慢。当下拉字段更改时,它会触发部分刷新并部分执行最近的选项卡。但是当我们查看日志时,部分执行会影响第一阶段的执行。在渲染期间,我们的 Java 代码会重新计算整个表单和所有选项卡上的所有字段。我们已经使用了一个阶段监听器。

@53.604:APPLY_REQUEST_VALUES,从遍历所有字段(~1s)开始,然后仅在一个选项卡上继续处理字段。到目前为止很棒。

@55.057:PROCESS_VALIDATIONS,仅限选项卡。优秀。

@55.338:UPDATE_MODEL_VALUES,仅限选项卡。胀。

@55.495:INVOKE_APPLICATION,仅限选项卡。完美的。

@55.651:RENDER_RESPONSE,处理整个表单。

@59.121:处理结束

我的问题:我们可以在我们的代码中添加一些快捷方式,这样它就可以跳过不改变的选项卡和字段的评估吗?

例如,是否可以使用某种内置方法来确定 XPage 是否正在执行部分刷新,以及哪些元素?

谢谢你的协助。


慕标5832272
浏览 178回答 2
2回答

HUH函数

选项卡式表格在网络上不能很好地工作,这也是原因之一。我建议进行重构,以便您的应用程序使用“向导式”方法,即它是一个单独的 XPage,每个选项卡都位于一个自定义控件上,并且只加载一个自定义控件。这需要更改您的导航以重新加载页面并使用一些后端方法来识别“草稿”(即并非所有访问和验证的选项卡)并完成。但它也消除了用户完成所有选项卡、提交和“保存”请求失败的风险,这意味着他们将丢失输入的所有内容。其他可能有好处的方法是使用动态内容控件一次加载一个选项卡(尽管以前访问过的选项卡仍然在组件树中,但尚未访问的选项卡不会)或使用 execMode 来限制服务器的内容过程。但是,您需要确保需要处理的所有内容都在 execMode 内,因此可能需要对页面进行一些重组。

神不在的星期二

我在 XPage 中使用常用的选项卡式表单 (Bootstrap),并且没有遇到性能问题。在我看来,您在后台进行的计算与形成瓶颈的字段数量相结合。您是否使用过 xpages 工具箱来查看每次部分刷新时访问了多少后端对象(数据库、视图、文档)?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java