我们有一个XPages应用程序,具有很多形式。一切都是动态的,这意味着表单内容来自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:处理结束
我的问题:我们可以在代码中添加一些快捷方式,以便跳过对不变的选项卡和字段的评估吗?
例如,是否可以使用某种内置方法来找出XPages是否在进行部分刷新以及哪个元素?
感谢您的帮助。
答案 0 :(得分:1)
带标签的表格在网络上无法正常运行,这是原因之一。我建议您进行重构,以便您的应用程序使用“向导式”方法,该方法是单个XPage,其中每个选项卡位于一个自定义控件上,并且仅加载一个自定义控件。这需要更改导航以重新加载页面,并使用某种后端方法来识别“草稿”(即并非所有已访问和验证的标签)并已完成。但这也消除了用户完成所有选项卡,提交和“保存”请求失败的风险,这意味着他们将丢失输入的所有内容。
其他可能有益的方法是使用动态内容控件来一次加载一个选项卡(虽然以前访问的选项卡仍在组件树中,但是尚未访问的选项卡则不会)或使用execMode来限制服务器处理什么。但是,您需要确保需要处理的所有内容都在execMode内,因此可能需要对页面进行一些重组。
答案 1 :(得分:0)
我在XPages中使用常用的选项卡式表单(Bootstrap),并且没有遇到性能上的麻烦。对我来说,似乎是您在后台进行的计算与构成瓶颈的字段数量相结合。
您是否已使用xpages工具箱查看每次部分刷新可访问多少个后端对象(数据库,视图,文档)?