当前位置:  开发笔记 > 编程语言 > 正文

最大的GWT陷阱?

如何解决《最大的GWT陷阱?》经验,为你挑选了8个好方法。

我正处于我们选择使用GWT实施的项目的开始/中间.有没有人遇到过使用无法克服的GWT(和GWT-EXT)的任何重大陷阱?从性能角度来看怎么样?

我们已经看到/听过的一些事情已经包括:

Google无法为内容编制索引

CSS和样式一般似乎有点不稳定

寻找有关这些项目的任何其他反馈.谢谢!



1> rustyshelf..:

我首先要说的是,我是一个巨大的GWT粉丝,但是有很多陷阱,但大多数(如果不是全部)我们都能够克服:

问题:编译时间过长,随着项目的增长,编译它所需的时间也会增加.我听说有20分钟编辑的报道,但我的平均约1分钟.

解决方案:将代码拆分为单独的模块,并告诉ant仅在更改时构建它.在开发过程中,只需构建一个浏览器,就可以大大加快编译时间.您可以通过将其放入.gwt.xml文件来完成此操作:


gecko1_8是Firefox 2+,ie6是IE等.


问题:托管模式非常慢(至少在OS X上)并且与您在编辑JSP或Rails页面并在浏览器中点击刷新时获得的"实时"更改相匹配.

解决方案:你可以给托管模式更多的内存(我通常得到512M),但它仍然很慢,我发现一旦你用GWT就足够了你就停止使用它了.您进行了大量更改,然后只编译一个浏览器(通常为20s的编译),然后在浏览器中点击刷新.

更新:使用GWT 2.0+这不再是一个问题,因为您使用新的"开发模式".它基本上意味着您可以直接在您选择的浏览器中运行代码,因此不会降低速度,加上您可以对其进行查询/检查等.

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM


问题: GWT代码是java,对于布局HTML页面有不同的心态,这使得采用HTML设计并将其转化为GWT更难

解决方案:您再次习惯了这一点,但遗憾的是,将HTML设计转换为GWT设计总是比将HTML设计转换为JSP页面要慢.


问题: GWT需要一点时间,并且还不是主流.这意味着大多数加入团队或维护代码的开发人员都必须从头开始学习

解决方案: GWT是否会起飞仍有待观察,但如果您是一家掌控自己雇佣的公司,那么您总是可以选择了解GWT或想要学习它的人.


问题:与jquery或简单的javascript相比,GWT是一个大锤.它需要更多的设置来实现它,而不仅仅是包含一个JS文件.

解决方案:使用类似jquery的库来处理适合这些的较小,简单的任务.如果要在AJAX中构建真正复杂的东西,或者需要通过RPC机制来回传递数据,请使用GWT.


问题:有时为了填充GWT页面,您需要在页面首次加载时进行服务器调用.当您获取所需数据时,用户坐在那里观看加载符号会很烦人.

解决方案:对于JSP页面,您的页面在成为HTML之前已经由服务器呈现,因此您实际上可以进行所有GWT调用,并将它们预加载到页面上,以便立即加载.详情请见此处:

通过预先序列化GWT呼叫来加速页面加载


我从来没有遇到任何问题CSS样式我的小部件,开箱即用,定制或其他,所以我不知道你的意思是什么是一个陷阱?

至于性能,我总是发现一旦编译好的GWT代码很快,并且AJAX调用几乎总是小于整页刷新,但这并不是GWT独有的,尽管你使用的本机RPC数据包如果你使用JAVA后端非常紧凑.


您可以重用JQuery,就像重新使用GWT一样,我认为这不是一个有效的参数.它们都支持继承,然后可以打包以供重用(GWT的.jar文件,JQuery的.js文件).我支持我所说的GWT是一个大锤,你必须用Java编写它,你必须编译它,你还有很多东西需要管理.如果你想打破一堵砖墙,你会选择大锤.这不是一个批判,这是一个有效的观点.适合工作的正确工具.

2> 小智..:

我们已经与gwt合作了将近2年.我们学到了很多东西.以下是我们的想法:

    不要使用第三方小部件库,尤其是gwt-ext.它会破坏您的调试,开发和运行时性能.如果您对此有何疑问,请直接与我联系.

    使用gwt只能填写应用的动态部分.因此,如果您与许多字段进行了一些复杂的用户交互.但是,请勿使用随附的面板.拿现有的库存设计师提供的页面.划出包含应用程序控件的区域.将这些控件附加到onModuleLoad()中的页面.这样您就可以使用设计师的标准页面,并在gwt外部进行所有样式设置.

    不要将整个应用程序构建为一个标准页面,然后动态构建所有部分.如果你按照我在第2项中的建议行事,那么无论如何都不会发生这种情况.如果你动态地构建所有内容,你将会破坏性能并为大中型应用程序消耗大量内存.此外,如果你按照我的建议行事,后退按钮会很好用,搜索引擎索引也会很好.

其他评论者也有一些很好的建议.我使用的经验法则是创建像您正在做标准网页的页面.然后分割出需要动态的碎片.将它们替换为具有id的元素,然后用于RootPanel.get( id ).add( widget )填充这些区域.



3> 小智..:

我们遇到的陷阱:

虽然使用GWT EXT之类的东西可以获得很多里程,但是只要在JavaScript库之上使用这种薄单板,就会失去调试能力.我不止一次把头埋在桌面上,因为我无法检查(在我的IntelliJ调试器中)GWT EXT表类中发生了什么......你只能看到它是一个JavaScriptObject.这使得很难弄清楚出了什么问题......

团队中没有人知道CSS.根据我的经验,这个人不是专家并不重要......只要他有一些良好的工作知识,并且在必要时知道谷歌的正确条款就足够了.

跨浏览器调试.关注进程外托管模式[ 1 ] [ 2 ] [ 3 ],希望进入GWT 1.6 ...现在,您只需要使用托管模式获得好处,然后使用"编译/浏览"按钮,您可以在其中使用其他浏览器.对我来说,在Windows上工作,这意味着我可以在FireFox中查看我的工作,并使用FireBug来帮助调整和改进.

IE6.令人惊讶的是IE 6将如何呈现不同的东西.我根据浏览器采用了将样式应用于最外层"视口"的方法,以便我可以使用CSS规则:

.my-style { /* stuff that works most everywhere */ }

.msie6 .my-style { /* "override" so that styles work on IE 6 */ }

最后,确保使用可以帮助您的编辑器.我使用IntelliJ - 它有很多GWT智能.例如,如果我尝试使用未由JRE仿真处理的类,它会让我知道; 如果我为一个小部件指定了一个样式,并且我还没有定义那个样式,那么代码会变得有点红色......或者,当看到CSS时,它会告诉我什么时候我指定了一个冲突的属性单一规则.(我还没有尝试过,但我知道版本8具有更好的GWT支持,比如保持"本地"和"异步"RPC接口和实现同步.)



4> Adam Albrech..:

GWT 2.0,应该在未来几个月的某个时间出现,解决了很多讨论的问题.

使用类似html/xml的语法创建布局

动态脚本加载 - 最初只下载基本的JS.其余的将根据需要下载

浏览器内托管模式 - 这可能会解决所讨论的托管模式速度问题,以及其他好处

"编译器优化" - 希望能够更快地编译

GWT 2.0在Google I/O上预览视频



5> Jla..:

不是"无法克服",而是一些基本的痛苦.

日期处理:

GWT使用弃用的java.util.Date,这可能会导致在客户端处理日期时出现意外行为.java.util.CalendarGWT不支持.更多信息在这里.

相关问题示例:

GWT java.util.Date序列化错误

获取GWT中的日期详细信息(日,月,年)

GWT中的客户端时区支持



6> Miguel Ping..:

我将为已经提到的那些添加一些要点:

数据绑定/验证.GWT没有开箱即用的数据绑定/验证支持,尽管该领域的一些项目开始出现.你会发现自己写的很多:

TextField fname, faddress;
...
fname.setText(person.getName());
faddress.setText(person.getAddress());
...

懒加载.由于gwt位于客户端,因此延迟加载实际上不是一种选择.您必须仔细设计RPC和域对象

发送所需的所有对象数据

避免急于获取所有数据

您还必须确保不会发送代理/非可序列化对象.hibernate4gwt可以帮助你解决这些问题.

UI设计.在java(面板,按钮等)中比在html中可视化UI更难.

历史支持.GWT不附带历史子系统,也不附带任何子系统以获取良好的URL或状态书签.你必须自己动手(尽管它支持历史令牌,这是一个开始).所有AJAX工具包AFAIK都会发生这种情况.

恕我直言,GWT缺少一个框架,该框架对此"线程"中提到的所有问题提供开箱即用的支持.



7> JP Richardso..:

我正在研究一个使用EXT GWT(GXT)的项目,不要与GWT EXT混淆.有一点不同,EXT GWT实际上是由编写ExtJS javascript库的公司生成的.GWT EXT是ExtJS库的GWT包装器.GXT是原生GWT.

无论如何,GXT仍然有点不成熟,缺乏一个我认为GWT EXT具有的坚实社区.然而,未来是GXT,因为它是原生的GWT,实际上是由制造ExtJS的公司开发的.随着ExtJS库上的许可证发生变化,GWT EXT有些瘫痪,从而减缓了GWT EXT的开发速度.

总的来说,我认为GWT/GXT是开发Web应用程序的一个很好的解决方案.我实际上非常喜欢托管模式进行开发,它使事情变得简单快捷.您还可以获得调试代码的好处.使用JUnit进行单元测试也非常可靠.我还没有看到一个伟大的JavaScript单元测试框架,我觉得它已经足够成熟,可用于测试企业应用程序.

有关GWT EXT的更多信息,请访问:http: //gwt-ext.com/

有关EXT GWT(GXT)的更多信息,请访问:http: //extjs.com/products/gxt/



8> Michael Neal..:

没有一个我无法轻易克服的重大陷阱.大量使用托管模式.当你使用GWT-ext时,你几乎不需要自己触摸CSS,除非你想调整开箱即用的外观.

我的建议是在一个库中使用GWT"本机"小部件,它们在功能上很接近.

重新搜索引擎索引:是的,该网站通常没有可导航的URL(除非您只是将小部件添加到常规网站的元素).您可以执行历史记录后退/转发功能.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有