0

一段时间以来,我一直在使用 ZK,现在我有一个托管在云中的应用程序,但这不符合我的性能预期。我的应用程序使用 ZK 作为视图,使用 Hibernate 与 MySQL 数据库交互,使用 Spring 管理与数据库交互相关的 bean。

示例场景:

  1. 在初始化时,使用休眠从数据库中检索一个列表(我们正在谈论最多 200 个对象,最多 6 个标准属性)。这需要一些时间,但可以接受。
  2. 我从列表中添加或删除对象我使用@NotifyChange("list") 告诉视图列表已更改。
  3. 列表已更新,但我认为这需要很长时间(约 2 秒)

第 3 步大约和第 1 步一样长,我不明白,用于数据库交互的 Spring 托管对象尚未初始化。另一件要注意的是,在从列表中添加或删除对象时,我不会从数据库中重新加载整个列表;Spring 托管 bean @Autowired 中的对象的本地副本保存到我的 ViewModel。(是的,可能与数据库不同步,但在我的情况下问题不大)但这消除了hibernate/spring/database作为瓶颈,对吧?

我也在 localhost 上运行了它,当然这更快,但仍然不是我期望/想要的即时。

现在我认为它可能与在 java 中与列表相关的对象的创建和删除有关。我研究了 ZK binder 如何工作以及如何更新对象,但我找不到任何关于 binder 如何处理列表更新的信息。

有谁知道 ZK binder 如何在视图模型中使用 @NotifyChange("listA") 注释该方法时更新视图中的列表?它实际上是否丢弃了旧列表并设置了整个新列表,或者它是否以某种方式合并了差异?

也非常欢迎对其他可能是瓶颈的问题发表评论!

提前致谢,

罗伯特

4

2 回答 2

0

我假设你Listbox用来代表你的名单。
首先你需要知道,zk
对 MVVM 使用的数据结构与它用于 MVC 的数据结构相同。这意味着
它使用ListModel性能提示
对 MVVM 也很有用。
当然 zk 不能
以某种方式实现标准模型,它适合每个人的需求。
所以你要做的就是实现你自己的
模型。通常最好的方法是从ListModelList.
这样您就可以智能地更新列表。

于 2013-06-25T09:16:00.837 回答
0

我经常使用 ZK,但我从未使用过 @NotifyChange,当我想重新加载网格或列表框的数据时,我总是会再次渲染或加载它们。对我来说,它在不到 1 秒的时间内运行良好且快速。这是我的绑定示例:
> 是的,当数据更改时,我会想起我的方法,再次加载它并且工作得很好。

    @Listen("onCreate = #listboxSolicitudes")
    public void loadList() {    
List<ConsultasSolicitudes> listaConsulta = null;
            listaConsulta = ConsultasSeguimientoDeSolicitudesDAO.obtenerSolicitudesAsignadas((Long) cbResponsable.getSelectedItem().getValue());
            ListModelList<ConsultasSolicitudes> solModel = new ListModelList<ConsultasSolicitudes>(listaConsulta);
            listboxSolicitudesAsignadas.setModel(solModel);
}

也许这可以帮助你,但如果花了那么长时间,一定有问题。

于 2013-06-13T16:20:17.413 回答