热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

IamconsideringmakinguseofGWTasthefront-endtoanexistingwebapplication.我正在考虑使用GWT作为现有We

I am considering making use of GWT as the front-end to an existing web application.

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

I can't justify a complete rewrite to 100% GWT in one go. It is likely that I would migrate parts of the system to GWT gradually. However for consistency I would like to make use of the GWT TabPanel, MenuBar, etc as global interface elements from day one.

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

As an experiment to see how 'legacy' parts of the system could be incorporated, I have done the following.

作为一个实验,看看系统的“遗留”部分是如何被纳入的,我做了以下几点。

The application's main page template now loads a small 'wrapper' GWT module on every page. This GWT module looks for a selection of DIVs in the dynamically generated host page. If the DIV is found, a suitable widget is slotted into place, i.e. menuBar, tabPanel.

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

A lot of the configuration for the included widgets can also be slotted into the host page as JSON structures. For instance, I have implemented an adapter that dynamically sets up a TabPanel in this way. I've also added some very simple widgets that load remote HTML, etc.

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

As a prototype, this all appears to work perfectly and loads quickly. However, it seems that GWT apps are really designed to be run from a single host page, not hundreds of dynamically generated ones.

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

Can anyone highlight any issues that the above approach may run into, particularly as the GWT module increases in size? I would aim to keep the legacy wrapper module intentionally lean. Other functionality would be implemented in separate modules.

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

How have other people integrated GWT into their front end in a gradual fashion?

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

2 个解决方案

#1


5  

One of the ways GWT was designed to be used is exactly as you've used it. We have done that in many of our apps - where there is one GWT module with multiple 'parts' that are loaded based on whether a given id exists on a page or not. So I don't see that you'll have any issues at all going this way. We often use this approach even for new web applications, where we just want a few 'widgets' on the page, rather than coding the whole application in GWT.

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

It won't make a huge difference, but one thing I would suggest is not putting the GWT Javascript code into your main template, but rather only put it on the pages that need it. It's true that if you're not running HTTPs it is cached basically forever, but it seems wrong to get people to load in the module if it's not actually needed on that page. This of course depends on how people use your site, if they are likely to download it anyway then it won't make any difference.

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

#2


2  

You're doing it right. Avoid avoid avoid the temptation to try to 'minimize' the GWT footprint by breaking it up into multiple separate apps.

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

The key to GWT performance is to have as few downloads as possible and to make sure they're cached. Loading a 250k bundle once is much better than two 200k bundles and because compression get's better with larger files you really start to reap benefits as things grow.

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

y-slow & firebug can be really helpful when it comes to convincing yourself of this.

y-slow&firebug在说服自己时非常有帮助。

One performance trick you might check out is available in the sample chapter here: http://www.infoq.com/articles/progwt It shows a mini-architecture around loading GWT widgets into any number of slots and pre-populating data in Javascript variables. This allows your GWT widgets to load and not require a second HTTP GET to get the data they use. In practice I found that this was a nice performance boost.

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


推荐阅读
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
author-avatar
荷塘一只嫩藕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有