我应该怎么做才能使用MVC加速缓慢的GWT应用程序

时间:2010-11-29 15:00:58

标签: java model-view-controller gwt

我已经将我的应用程序更改为使用MVC并且速度非常慢。

说明

  • 该应用程序有5个复合材料,每个复合材料代表不同的数据,并不总是显示
  • 应用程序正在使用MVC,我在更新时将模型传递给每个组合。
  • 每次收到通知时,我都在重建树(以及所有树项),但是,只有一个树项会发生变化,所以这可能是浪费。
  • 由于应用程序的风格,我甚至必须通知()无关紧要的事情,例如更改文本框中的文本或选择菜单,因为我有一个保存的图标,只要树中的某些内容发生变化,就会转为未保存
  • 所有复合体都在实现相同的Observer接口,因此所有复合都会在每个notify()上进行更新。

有人可以给我一些提示,告诉我应该做些什么来加速这个应用程序。上面哪一个可能比其他人更耗费CPU,即正在用<重建树。每个notify()上的20个项目将占用大量的CPU时间,我是否需要重新设计它?我应该创建一个单独的界面,例如SaveStateChanged,它只会通知树,或者这只是浪费时间。

3 个答案:

答案 0 :(得分:4)

当应用程序变慢时,大多数时间通常不会花费自己执行JavaScript计算(例如,我不相信,只是调用很多观察者是一个问题 - 它取决于他们做了什么!)。通常,冗余是由冗余布局(例如,当每个观察者引起布局调用时)引起的。有时,许多DOM操作也可能是一个问题(主要是使用Internet Explorer)。

我建议您使用Speed Tracer,尤其是redundant layout example。如果这不是您的应用程序中的特定问题,您应该能够采用与示例中所示类似的方法来跟踪它。使用markTimeline("String")可以在Speed Tracer的图表中清楚地显示代码的特殊部分。

答案 1 :(得分:0)

您需要采取的第一步是准确隔离性能问题发生的位置。你已经确定了一些很好的候选人,但是你会想要用冷酷的统计数据来支持它。

您可能会发现您只需要解决上述问题之一,或者可能完全存在另一个问题

答案 2 :(得分:0)

我建议你摆脱Observer界面,转而采用更精细的东西。查看Swing中的MVC体系结构,其中JTree与TreeModel关联,并实现TreeModelListener接口以听取模型的更改。 TreeModelListener接口具有模型调用的特定方法,用于指示节点在树中更改,添加或删除。此外,它还有一个TreeModelEvent,它提供有关受影响的节点的更多数据。如果模型准确地告诉您更改的内容,您将有更多的空间来智能地从侦听器实现中做出反应。