坦白来说,在开发这个应用期间,我在内心一直在比较用JavaFX做与用Adobe Flex做同样的事情。
简单说来,在今天, Flex比JavaFX高效得多。但我们得记住我们是在用Flex版本3与JavaFX版本1进行对比。如果你了解如何开发Swing应用,你可能就会宁愿继续用Swing,而不是使用我们在这个Pet Store版本中手工创建的JavaFX 1.0包装类。
JavaFX 1.0 最大问题是它不包括任何用于WEB开发的用户界面组件。连简单的超链接组件都没有,更不用说数据网络或者树列表组件。我认为这没有其他原因,只能归咎于 Sun公司在开发此新用户界面工具时只投入了太少的时间与有限的人力资源。
幸运的是,Sun即将发布JavaFX2.0 版本,它带有完整的用户界面组件、容器、导航条和布局控制。微软仅仅只为宣布自己做出与Flex相似产品,就在2007年发布了功能不全的 Silverlight1.0,直到一年后,全功能的Silverlight2.0才可用。好消息是Java开发者已经开始建造他们自己的开放源码组件库:Jfxtras.
另一方面,我看到一些功能失于Flex而收于JavaFX.
例如,ActionScript不支持多线程。这在与远程站点通讯时不成其问题-所有的远程调用都是同步的,并且使用回调机制把服务器数据流传送到客户机。但是,如果你需要写或者使用一个执行在客户端的CPU密集计算Java库时,我认为Java就会胜过ActionScript. 两种语言的语法相当接近(见http://flexblog.faratasystems.com/?p=115)。
JavaFX支持eval()函数,可以在运行过程中编译并执行一小段代码。Flex并不支持这一功能。
数据双向绑定已在JavaFX实现,但Flex预计到版本4才支持。
我见过一些对于Flex与JavaFX 网络协议的基准测试。最近的测试只是提供了客户机与服务器间的XML和REST数据交换。当然,你能编写Java套接字或者包装一个RMI客户到 JavaFX,这会比ActionScript实时消息协议快吗?我们不知道。或者你能在JAVA Applet和服务器端Java字符流间用HTTP通道通讯。这会比使用AMF,一种基于HTTP的二进制协议快吗?我们也不知道。
在开发移动应用时JavaFX 消除了许多复杂性。它承诺可以不用Java SE开发桌面应用,可以不需要用Java ME开发移动应用—JavaFX就是你的唯一需要的解决方案。JavaFX移动开发提供了硬件加速。记住,Java在移动设备中已经有26亿的装机量!Java在这一领域对Flash Lite有绝对优势。
JavaFX1.1快要发布(编者注:该版本已于09年2月17日发布)。它在移动领域执行更快,bug更少,功能更多,但在桌面平台上没有什么主要更新。
我明白这不是要求大量现金注入的好时机,但是,如果Sun微系统公司的管理者不能找到一条在未来JavaFX版本上双倍扩大基于此平台应用开发团队的方式,整个Adoble Flex团队就能在这一年期内安全地发展起来。因此,如果投入太少,JavaFX就要尽早开放源码。
|