Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GWT中管理许多小部件_Gwt - Fatal编程技术网

在GWT中管理许多小部件

在GWT中管理许多小部件,gwt,Gwt,假设我们在GWT应用程序中具有以下小部件/面板结构- DockLayoutPanel左侧的树菜单,用于导航到不同的应用程序 DockLayoutPanel中心的一个面板,不同的内容小部件加载在此面板中(这由导航树菜单控制) 这些内容小部件是包含一个或多个小部件的组合 处理此类应用程序的一种方法是为所有小部件/面板保留单例,这意味着组合将为其所有子小部件保留单例。但我觉得这是对单例的过度使用。另一种方法是在每次需要时构造新的小部件对象,但这一定很昂贵 围绕这个问题的最佳实践是什么?是否有解决这

假设我们在GWT应用程序中具有以下小部件/面板结构-

  • DockLayoutPanel左侧的树菜单,用于导航到不同的应用程序
  • DockLayoutPanel中心的一个面板,不同的内容小部件加载在此面板中(这由导航树菜单控制)
  • 这些内容小部件是包含一个或多个小部件的组合
处理此类应用程序的一种方法是为所有小部件/面板保留单例,这意味着组合将为其所有子小部件保留单例。但我觉得这是对单例的过度使用。另一种方法是在每次需要时构造新的小部件对象,但这一定很昂贵

围绕这个问题的最佳实践是什么?是否有解决这个问题的标准模式

另一种选择是每次需要一个小部件对象时构造一个新的小部件对象,但这一定很昂贵

您可能会感到惊讶。虽然小部件创建不是免费的,但在大多数情况下,它相当便宜,即使在DevMode中也是如此。在DevMode中创建一些小部件(特别是FlexTable/Grid)的成本很高,但一旦编译应用程序,这些小部件的速度就会大大加快

似乎没有任何模式专门针对这一点,我也不能指出任何一位大师给出了最佳实践,但在我们的应用程序中,我们以前将所有顶级小部件都视为单例,这给我们带来了大量问题。(管理不同屏幕之间的状态,处理事件总线事件,未清除时屏幕上的陈旧数据)

我们只是重构了大部分代码,以便更多地按需创建(随后在不再需要时销毁),我们获得了更简单的代码和更快的启动时间

最后,如果您确实按需创建小部件,可能会有一些情况需要通过使这些小部件成为单件来提高性能,但我认为您会发现,只有少数几个小部件需要这样做

总而言之,如果您没有尝试过,不要认为某些东西会很慢,也不要先发制人地优化您的代码

另一种选择是每次需要一个小部件对象时构造一个新的小部件对象,但这一定很昂贵

您可能会感到惊讶。虽然小部件创建不是免费的,但在大多数情况下,它相当便宜,即使在DevMode中也是如此。在DevMode中创建一些小部件(特别是FlexTable/Grid)的成本很高,但一旦编译应用程序,这些小部件的速度就会大大加快

似乎没有任何模式专门针对这一点,我也不能指出任何一位大师给出了最佳实践,但在我们的应用程序中,我们以前将所有顶级小部件都视为单例,这给我们带来了大量问题。(管理不同屏幕之间的状态,处理事件总线事件,未清除时屏幕上的陈旧数据)

我们只是重构了大部分代码,以便更多地按需创建(随后在不再需要时销毁),我们获得了更简单的代码和更快的启动时间

最后,如果您确实按需创建小部件,可能会有一些情况需要通过使这些小部件成为单件来提高性能,但我认为您会发现,只有少数几个小部件需要这样做


总而言之,如果你没有尝试过,不要认为事情会很慢,也不要先发制人地优化你的代码。

我们在ActiveGrade上遵循了类似的路径,现在按需创建大多数小部件。效果很好。如果我要优化交互速度,我的下一个猜测是按需创建小部件-但我仍然避免使用siNgleton。太复杂了。我完全同意。而且——即使在需要优化的情况下——单件通常不是答案。相反,在其他对象的字段、列表、地图或其他任何地方保留对需要重复使用的小部件的引用。然后确保构建一个非常干净的机制,在重复使用小部件之前重新初始化它们!我们遵循了与ActiveGrade的路径类似,现在可以按需创建大多数小部件。效果很好。如果我要优化交互速度,我的下一个猜测是按需创建小部件-但我仍然会避免单件。太复杂了。我完全同意。而且,即使在需要优化的情况下,单件通常也不是答案。相反,请保持引用需要在其他对象的字段、列表、地图或其他任何地方重复使用的小部件。然后确保在重复使用它们之前构建一个非常干净的机制来重新初始化小部件!