我目前正在研究适合开发离线html5创作应用程序的各种跨平台框架。除了跨平台操作(Windows,Linux,OS-X)之外,我的应用程序还具有以下主要要求:
嵌入式数据库 嵌入式(或,其次,主流浏览器)HTML5渲染引擎 高性能可编辑DND树,拆分器面板和富文本编辑器小部件 中型图像处理USB记忆棒便携性
我认真研究了这些框架:
jQuery (JavaScript), HTML5, CSS3 Google Web Toolkit [GWT] (Java to JavaScript) JavaFX 2.0 (Java) QT (C++ (Java binding available)) 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的问题,因为这两个框架分别成为我最喜欢的#1和#2,最有成效的选择。
- 也就是说,我会将jQuery / HTML5 / CSS3框架添加到组合中。这个框架是如此强大,并且充满了x平台
应用程序开发的潜力,以至于我甚至说它是不可避免的。在我对小部件控件的广泛搜索中,可编辑的DND树,拆分器面板和富文本所见即所得编辑器小部件的主要候选者原来是开源jQuery插件。一旦你解决了本地 file:// 问题,jQuery/HTML5/CSS3与JavaFX WebView小部件很好地兼容。jQuery/HTML5/CSS3不足的一个领域是客户端数据库存储。这就是JavaFX和jQuery / HTML5 / CSS3框架的组合被证明是非常强大的。
- 尽管它们是用C++编写的,但Qt模块具有Java和JavaScript语言包装器,这意味着开发人员不需要知道或使用C++来使用Qt。
- 这就提出了一个观点,即它不一定是JavaFX与Qt,非此即彼的问题。事实上,一个更有建设性和更有价值的问题很可能是,“JavaFX和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