1. pendingSrc
问题描述:Image的setUrl方法在第二次使用的时候,会出现“pendingSrc”的问题,导致图片无法显示。
原因分析:可能是GWT的bug,具体原因不详。
解决办法:通过DOM.setElementProperty()来设置src的值。
2.内存泄露
问题描述:刷新页面容易导致复杂的ui出现内容泄露。
原因分析:编码实现中很容易是的对象间出现循环引用,例如添加监听器的时候等,部分浏览器(尤其是IE)对此循环引用无法进行资源的释放。而在不断的刷新中,老的循环引用链没有正确断开,新的循环引用链又伴随着新对象的产生而产生,后果很严重。
解决办法:
- a) GWT自身提供了一套机制来解决这个问题。简单来说,就是在Widget(或其子类)的对象在被拆卸(detach)时,注销所有自身的所有事件监听,若自身实现了HasWidget接口,则会断开与它关联的其它Widget对象的关联。值得注意的是,若是应用在采用了GWT对第三方js库的封装,我就不能确定这种机制是否依然有效了。可以肯定的是,若是第三方js库内部就存在内存泄露的问题,那就算用GWT也避免不了。
- b) 对于除了Widget之外的其他自定义类实例若是也存在这种可能,建议解决策略是,将这些自定义对象暴露释放资源的方法(如clear,dispose或是destroy),并由Widget对象持有它们的引用,覆写Widget的onUnload方法,在其中调用它们的资源释放方法,这样就把自定义对象生命周期与Widget绑定在一起,即当Widget被销毁时,回调onUnload释放它们的资源。
3. 延迟加载
问题描述:复杂UI在初始化的过程中往往是很耗时的,而延迟加载是最常用用来应对它的一种模式。但延迟加载采用什么方式,以及什么时机加载确实难题。
解决办法:抛开必要的初始化预载外,可将延迟加载的时机放在页面部件被显示的时候再进行初始化。基于这个时机,在GWT中的解决模式是,覆写Widget或其之类的onLoad方法,因为这个方法会在Widget装载到页面时回调,将涉及后台数据请求或是页面的耗时计算的初始化逻辑放在onLoad中,就可以实现延迟加载。
4.事件与状态
问题描述:UI复杂度直接体现在各个子部件之间的复杂对象关联,这种关联基触发事件或是传递状态所必要的。但是,这也带来许多棘手的问题,如循环引用、高耦合度、复用性和维护性差等。
解决方法:
- a) 首先,暴露一个全局可访问的数据区,可以无障碍的共享数据;其次,设计一个统一的机制来控制数据区的数据写入,避免写数据发生的冲突;最后,暴露数据写入的监听回调接口,利于状态被改变时可以触发事件。这样,大部分的页面部件可以集中依赖这个全局数据区来触发事件或传递状态,降低复杂的网状关联。此外,可以全局数据区进行集中初始化和销毁,使得资源被合理和可见的控制;
- b) 利用Gwt提供的History,建立自己的消息传递机制。因为History提供的都是静态方法可全局访问,通过newItem来写自己的消息串,比如模仿Url传参(abc?k=v&n=l);再通过想History注册监听,在onHistoryChanged的回调中对消息串进行解析,并调用其他逻辑。
二者比较起来,各有优势,根据具体情况选用或混用。History优势在于可通过地址携带状态,很轻量,不用操心初始化和销毁;劣势是状态必须是字符串,编码和解码是个麻烦事,当状态信息很多时,url自然会很长,所以...。
5. 页面数据刷新
问题描述:很多时候,我们希望在程序中控制页面部件装载(attach)和拆卸(detach),以刷新数据显示。而GWT这方面的方法(如onAttach,onDetach,onLoad,onUnload)都是保护可见的。
解决办法:
- a) 通过集成Widget或子类,改写上述方法的可见性,暴露给其他控制类调用;
- b) 很多Panel类提供了setWidget方法,这个方法会用新的对象替换老的,这个过程会先触发老的对象进行拆卸(detach),此后会装载(attach)新的对象。若是新老对象是同一个对象即可实现对象的更新。
分享到:
相关推荐
GWT学习经验及实例指导,详细说明了GWT的安装以及使用步骤,结合实例,简单易懂
gwt 练习gwt 练习gwt 练习gwt 练习
GwtMockito 是 GWT 应用测试工具。使用 GWTTestCase 测试 GWT 应用会比纯 Java 测试慢,而且不能使用基于反射的工具,比如模拟测试框架。如果尝试使用常规测试示例,那么会遇到这个错误:ERROR: GWT.create() is ...
smartgwt结合数据库应用实例 体验富网络应用(RIA) 对应blog—— http://hi.csdn.net/link.php?url=http://blog.csdn.net%2FcatPan
GWT(Google Web Toolkit) 是 Google 最近推出的一个开发 Ajax 应用的框架,它支持用 Java 开发和调试 Ajax 应用,本文主要介绍如何利用 GWT 进行 Ajax 的开发。 Ajax技术是当前开发web应用的非常热门的技术,也是Web...
基于Google App Engine(GAE)的Java和GWT应用开发_Google App Engine Java and GWT Application Development Nov.2010
EXT-GWT2.0.1+API+DOC gwtdesigner Gwt-Ext基础-中级-进阶 GWT快速开发 GWT入门 GWT中文教程
NULL 博文链接:https://mydownload.iteye.com/blog/1297157
fwefwefwGWT工具GWT工具GWT工具GWT工具GWT工具GWT工具
NULL 博文链接:https://kylinsoong.iteye.com/blog/738645
中文名: 基于Google App Engine(GAE)的Java和GWT应用开发 原名: Google App Engine Java and GWT Application Development 作者: Daniel Guermeur, Amy Unruh 资源格式: PDF 版本: 文字版 出版社: Packt ...
瑞友天翼应用虚拟化系统(GWT)V6.0服务器端和谐补丁
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
从研发经验总结的smartGwt的开发与实现
GWT工具包中提供了几个非常适用的小工具来帮助我们更快的建立GWT应用开发环境:projectCreator、applicationCreator、junitCreator。 • projectCreator 创建在Eclipse中开发GWT应用所需要的项目基本文件和可选的...
使用firefox 浏览GWT应用的 浏览器插件gwt-dev-plugin.xpi
gwt 入门,是你开始学习gwt的大道 安装之后的目录结构为: C:\程序开发\Java\gwt-windows-1.4.59 doc(文档目录,开发文档和Java API文档) samples(示例代码目录,非常有名的KitchenSink示例代码即在此目录中)...
很好的资源,在这边分享下,提供给想要寻找GWT资源的兄弟姐妹们 如果哪位兄弟有好的资源不要忘了分享啊
瑞友天翼应用虚拟化系统(GWT)V7.0服务器端和谐补丁
Ajax 被用于创建更加动态和交互性更...Google Web Toolkit (简称GWT) 是 Google 推出的 Ajax 应用开发包,GWT 支持开发者使用Java 语言开发 Ajax 应用。本文中作者将介绍如何使用 GWT 开发 Ajax 应用的基本方法和步骤。