遗留应用程序中具有多个主机页面的GWT

时间:2008-12-12 15:48:29

标签: gwt

我正在考虑将GWT用作现有 Web应用程序的前端。

我无法一次性完全重写为100%GWT。我很可能会逐渐将部分系统迁移到GWT。但是为了保持一致性,我想从第一天开始使用GWT TabPanel,MenuBar等作为全局界面元素。

作为一个实验,看看如何整合系统的“遗留”部分,我做了以下工作。

应用程序的主页面模板现在在每个页面上加载一个小的“包装器”GWT模块。此GWT模块在动态生成的主机页面中查找选择的DIV。如果找到了DIV,则会将合适的窗口小部件插入到位,即menuBar,tabPanel。

包含的小部件的许多配置也可以作为JSON结构插入主机页面。例如,我已经实现了一个以这种方式动态设置TabPanel的适配器。我还添加了一些非常简单的小部件来加载远程HTML等。

作为原型,这一切似乎都可以完美并快速加载。 但是,GWT应用程序似乎真的设计为从单个主机页面运行,而不是数百个动态生成的主机页面。

任何人都可以强调上述方法可能遇到的任何问题,特别是当GWT模块的大小增加时?我的目标是保持传统的包装模块有意识地倾斜。其他功能将在单独的模块中实现。

其他人如何以渐进的方式将GWT融入他们的前端?

2 个答案:

答案 0 :(得分:5)

设计使用GWT的方法之一正如您所使用的那样。我们已经在许多应用程序中完成了这项工作 - 其中有一个GWT模块具有多个“部件”,这些部件是根据页面上是否存在给定ID而加载的。所以我没有看到你这样做会有任何问题。我们经常使用这种方法,即使对于新的Web应用程序,我们只需要在页面上使用一些“小部件”,而不是在GWT中编写整个应用程序。

它不会产生巨大的差异,但我建议的一件事是不将GWT javascript代码放入主模板,而只是将它放在需要它的页面上。确实如果你没有运行HTTP,它基本上是永久缓存的,但是如果在该页面上实际上不需要人们加载模块似乎是错误的。这当然取决于人们如何使用您的网站,如果他们可能会下载它,那么它将没有任何区别。

答案 1 :(得分:2)

你做得对。避免避免试图通过将其分解为多个单独的应用程序来“最小化”GWT足迹的诱惑。

GWT性能的关键是尽可能少地下载并确保它们被缓存。一次加载一个250k的捆绑包比两个200k的捆绑包要好得多,而且随着大型文件的压缩越来越好,随着事情的发展,你真正开始获得收益。

y-slow&在说服自己时,萤火虫真的很有帮助。

您可以查看的一个性能技巧可在此处的示例章节中找到:http://www.infoq.com/articles/progwt 它展示了一个迷你架构,可以将GWT小部件加载到任意数量的插槽中,并在JavaScript变量中预先填充数据。这允许您的GWT小部件加载,而不需要第二个HTTP GET来获取他们使用的数据。在实践中,我发现这是一个很好的性能提升。