设置多个属性的正确模式是什么,每个属性都会触发昂贵的刷新操作?

时间:2012-09-17 08:02:14

标签: design-patterns gwt optimization user-interface widget

假设您有一个用户界面小部件,并且在某些状态更改时,您需要设置执行某些操作。 所以你做了类似的事情:

widget.setSize(400, 300);
widget.setHeader("whatever");
widget.setData(new int[] {2, 3, 5});
widget.setFancyThingEnabled(true);

然后假设每个操作都触发整个窗口小部件的刷新。那效率很低。

我知道有几种方法可以解决这个问题,但是这样做的正确/最好/最优雅的模式是什么? 我知道我可以:

  • 创建一些Property对象,我可以填写,然后将其提供给小部件。
  • 有一些setRefresh(enabled:boolean)方法来包装交易。
  • 仅允许通过回调方法进行属性设置,然后在事务中执行。
  • 将刷新放入队列并等待一段时间再继续。

我正在使用GWT,它在任意慢的机器上运行在浏览器上,但这几乎适用于任何环境。

修改 请记住,UI是一个示例,我指的是从一个状态到另一个状态的转换会触发对每个其他中间状态进行过多不必要计算的一般情况。

2 个答案:

答案 0 :(得分:2)

这个strategy pattern

怎么样?
widget
  .startAction() // instance of WidgetAction returned
  .setSize(400, 300)
  .setHeader("whatever")
  .setData(new int[] {2, 3, 5})
  .setFancyThingEnabled(true)
  .close(); // actual changes made for UI

答案 1 :(得分:0)

不必要,因为浏览器已经在为您执行此操作。这是可能的,因为在完成整个当前JavaScript事件处理程序之前不必进行渲染。与某些桌面GUI框架相比,它实际上是Web开发的一大优势。