BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

采访:基于AIR实现任务管理工具Doit.im

| 作者 霍泰稳 关注 1 他的粉丝 发布于 2009年11月17日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Doit.im是一个结合GTD理论,基于AIR开发的个人待办事项管理工具,目前发布了1.1版本,已经有近1.8万人注册使用。InfoQ编辑就AIR开发相关话题采访了Doit.im的主力开发者李晓。

InfoQ:为什么要基于AIR开发?有没有什么特别的考虑?

李晓:我们当时选择基于AIR的开发主要有如下考虑:

  • 跨平台:虽然基于浏览器的Web应用也能够一定程度做到,但是AIR在各个操作系统的行为一致性还是远远高于跨浏览器的Web应用,我们基本上没有花什么精力就达到了这一目标。
  • 桌面应用:Doit.im虽然是基于网络的应用,但是本质上是桌面应用,1.1 版本新增的离线支持让Doit.im在没有网络时也能够工作。现在浏览器端的解决方案是采用Gears来保存离线数据,但是相对于AIR的本地应用而言仍然受到很多限制,比如文件操作,最小化应用,浮动窗口等等。虽然AIR也不是完全拥有普通桌面应用的所有能力,但是相对浏览器而言还是具有很大的优势的。

InfoQ:在使用AIR开发过程中,最大的挑战来自于哪里?

李晓:

  1. 性能:我们原来考虑使用AIR其实还有一个原因,就是因为AIR是本地应用,ActionScript虽然和JavaScript有血缘,但是运行期是经过编译的,怎么想它都应该在性能上优于基于JavaScript的Web应用。但是实际结果却很难说 AIR在性能上有优势。为了解决性能问题,已经影响到我们放弃一些好的用户使用体验。一般来说,更多使用Flex原生控件能够在这个方面得到更好的效果。而多使用或少使用一个VBox(Flex UI组件)有时候在界面展现上会有天壤之别,这多少让人不得不在一开始就为性能而谨慎编码,虽然这在现代编程理论中已经是大忌。
  2. 内存使用率:这个实际上我们只能做非常有限的努力,AIR使用的内存显得非常夸张,Doit.im的客户普遍抱怨Doit.im使用了太多内存,基本上能比它更多使用内存的也就是浏览器了。
  3. 文档稀缺:Adobe虽然有公布很多API文档,但是多数文档过于简陋。更加缺乏的是如何使用控件的文档,这里所说的如何使用,不是说这个控件具有什么属性、什么方法,每个属性和方法的功能是什么,而是这个控件是解决什么问题的,什么情况下应该如何使用该控件。这个问题的结果是,在初期,我们的团队犯了很多使用控件不当的问题,一般来说,一个控件被在错误情况下使用,它的功能还是完整的,只是从性能和最终效果上会有差别,特别是性能方面,我们为此花了很多精力。
  4. 代码开源:现在Adobe已经开源了不少代码,但是仍然有核心代码是非开源的,这在碰到Flex/AIR本身的bug时就比较致命,不能调试,你又不知道怎么回事,文档又缺,只能想方设法避开,好像没头苍蝇一样到处撞。也许相对于那些完全闭源的开发环境这已经好多了,而我可能也更习惯于Ruby/Java这样的环境,但是这确实挑战人的神经。
  5. 在ActionScript 3中,将private关键字做了强化,一旦声明成private,那真的就是没有任何办法可以在类之外调用到相关属性或者方法了。当你碰到问题并且没有办法接触到源代码时,这就非常麻烦了。ActionScript的这种发展方向,让人担忧。强类型和各种限制能够避免一些程序员犯错,但同时也关闭了程序员做出正确选择的门。

InfoQ:你希望AIR在新的版本中做哪些改进?

李晓:

  1. 性能(天下武功,为快不破);
  2. 内存使用率;
  3. 更多本地支持,比如注册系统快捷键,这块对 Doit.im 来说是非常需要的,我相信很多桌面应用也非常需要这个;
  4. 更多Meta programming支持,放开对程序员的束缚。

InfoQ:Doit.im产品的开发环境是什么样子的?

李晓:

  •   操作系统:Windows, Mac OS
  •   IDE:Flex builder 3
  •   数据传输框架:graniteds
  •   客户端服务器传输协议:AMF
  •   服务器端:Hibernate做数据存储;jrest-route实现REST服务

这里简单解释一下。至于IDE虽然Flex builder 3有很多不尽人意之处,但是似乎没有太多选择,IntelliJ也推出了Flex插件,License的原因没有去尝试。

客户端服务器传输方面,采用的graniteds规规矩矩,但是在使用过AMF这种强类型的传输协议之后,我现在更倾向使用 JSON为传输载体的REST接口,相对来说透明、简单清晰,因为AMF的AS RemoteObject实现在登录登出方面有些问题,其实现策略也感觉不太适合实现随时离线的应用。

jrest-route是我们为实现简单的REST API而做的一个简单实现,现有的Java REST框架感觉普遍太过繁琐复杂,所以自己实现了一个开源出去了。

注:现在InfoQ正和Adobe合作,提供Flash Builder 4 Beta 2的高速下载,11月20日前下载还能免费获得产品序列号,感兴趣的读者可以直接点击这儿下载

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

再次说明java这种语言已经不合时宜了 by withyou gakaki

adobe换新语言吧.....as模范java太多了,swing的痕迹很明显

javafx要好的多 三大ria平台之中. 语言是很不错的

js很灵活,但as还远的很,,

为何不尝试 restful freamework ,是用rails +ruby +flex的组合

使用反馈 by 吴磊 super

我用过了,速度太慢了。目前的运行速度让我这个用户无法接受,因此我在安装完成后决定把他删除掉。我想其他的用户也无法忍受目前的这个速度。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT