我目前正在研究适用于开发离线HTML5创作应用程序的各种跨平台框架。除了跨平台操作(Windows,Linux,OS-X)之外,我的应用程序还具有以下主要要求:
嵌入式数据库
嵌入式(或次要的主流浏览器)HTML5渲染引擎
高功能的可编辑DND树、分隔面板和富文本编辑器小部件
中等强度的图像处理
USB存储器便携性
我认真研究了以下这些框架:
jQuery(JavaScript),HTML5,CSS3
Google Web Toolkit [GWT](Java转JavaScript)
JavaFX 2.0(Java)
QT(C++(Java绑定可用))
Xulrunner(XML,JavaScript)
GTK+(C)
Adobe Air
Pyjamas
我花费了一笔不菲的钱购买了所有这些技术的书籍,并开始编写原型以查看每个框架可以带我走多快、多远。
最初,JavaFX 2.0以大幅领先的速度让我进展得最远。简单地说,这是因为使用JavaFX,所有工具、IDE、库、文档、代码示例、反馈、调试、社区支持、制造商(Oracle)支持和学习曲线都能以最少的阻抗匹配方式结合在一起。
JavaFX最大的优势可能在于它实现客户端嵌入式数据库(Derby)的简易性。而在其他框架中,这项任务却令人惊讶地更加困难和混乱。
不幸的是,当我发现WebView小部件无法执行来自本地file:// URL的JavaScript时,我遇到了严重的JavaFX障碍。 QtWebKit、GTKWebKit、Safari和Opera(所有基于WebKit)也表现出相同的file:// JavaScript阻止行为(但Chrome没有),因此我认为这是一个默认的WebKit安全措施。
当时,我认为file:// JavaScript问题是JavaFX的致命缺陷,所以我转向开发jQuery、GWT和Xulrunner原型。结果,我的原型制作生产力大幅下降。与JavaFX相比,这些其他框架的拼凑和阻抗失配明显更糟糕。
非常之多,经过数周在杂草丛中漫游后,我回到我的JavaFX原型机上,充满动力地寻找解决方法。最终,我通过在原型机中嵌入Java SE 6的Web服务器,并通过以下格式的URL加载JavaFX WebEngine来连接本地文件:"http://localhost:58357/xxxxx.html" 来解决了这个问题。以这种方式解除JavaFX原型机的阻塞就像回家一样。这是一股真正的清新之风,更不用说是一个巨大的生产力提升。
基于这些经验,以下是一些见解,可能对JavaFX与Qt之间的辩论有所帮助。
我同意JavaFX和Qt的问题,因为这两个框架分别成为我最喜欢、最高效的选择。
也就是说,我会将jQuery/HTML5/CSS3框架加入其中。这个框架非常强大,对于跨平台应用程序开发具有巨大的潜力,以至于我可以说它是不可避免的。在我的广泛搜索中,可编辑DND树、分隔面板和富文本wysiwyg编辑器小部件的领先候选人都是开源的jQuery插件。一旦你处理好了本地文件://问题,jQuery/HTML5/CSS3与JavaFX WebView小部件非常兼容。jQuery/HTML5/CSS3短板在客户端数据库存储方面。这就是JavaFX和jQuery/HTML5/CSS3框架组合极其强大的地方。
尽管它们是用C++编写的,但Qt模块具有Java和JavaScript语言包装器,这意味着开发人员不需要知道或使用C++来使用Qt。
这带来了一个问题,它不必是JavaFX vs Qt的问题,更有建设性和有益的问题可能是"JavaFX AND Qt?"。
这带出了另一个重要的观点:我很快发现,我最好的跨平台应用程序开发框架实际上是JavaFX 2、纯Java SE、Swing(用于遗留自定义小部件)、WebKit和jQuery/HTML5/CSS3的混合体。在未来,GWT、相关的第三方GWT库和Qt模块可能会加入到这个混合中。这里的重点是计划使用单一的、基因纯净的框架很快就被抛弃了。
目前,将整个混合框架绑定在一起的唯一共同线程是普通的Java SE。由于JavaFX 2是建立在Java SE上的,所以我的建议是从JavaFX 2开始,然后根据需要添加Swing、WebKit、jQuery/HTML5/CSS3、GWT和Qt。
最后,这篇文章帮助我决定加入JavaFX阵营。
http://fxexperience.com/2012/04/interview-with-peter-zhelezniakov/
--H