为什么Java没有在RIA开发领域成为最具统治力的技术?我不是第一个人问这个问题,也不是最后一个。我无法理解10年前发明了RIA的公司在这个领域一直停步不前,更无法对后来才产生的低层技术发起挑战。JavaScript名字中带有“Java”是为了在技术领域“欺骗”人们的眼球,但看到它在RIA市场的统治地位,你不得不服。
我已经从事软件开发超过25年,主要是在C++开发和面向对象的设计。由于打算转向web市场,几年前我开始从事RIA开发。然而我被可用的开发选择吓到了,而且看起来如果想完成最简单的功能应用并正确运行困难重重。我曾使用Java做后台工作,对我而言,最理想的解决方法是使用Java创建客户端和服务器端工作。问题是确实没有很好的客户端Java解决方案,Swing太过笨重和死板,其他技术也有类似的缺点。我真正需要的是一个客户端解决方案:它易于使用而且在构建UI时像HTML/CSS一样灵活,同时又能够提供Java动态强健的特性。所以在18个月以前我辞去全职工作,开始研发一个基于Java的RIA产品叫做Galileo RIA Framework (http://www.galileo-riaf.com/)。
使用JavaScript时我曾遇到的麻烦之一是不同浏览器中特性和表现的不统一问题,所以当我开始设计 Galileo时我的一个主要目标是能够在各种主流浏览器和主流平台上运行如一。在了解了Java插件的历史之后,我很不确定我是否能达到这个要求。令我感到释怀的是,最新的Java插件(当时是1.5)在主要的浏览器上(IE, Firefox, Netscape, Opera, Safari, and Camino)表现不错,而且我分别在Windows XP 和Vista、 Mac OS-X以及几个Linux 版本上测试了。于是我埋头于我的UI框架开发中。
最近我发布了Galileo 的Beta版,许多开发者使用过并觉得它很有新引力,然而仍然许多还是不愿意使用,因为Galileo对Java插件的依赖很大。我知道Java插件问题一直颇受诟病,但我不知道这个问题这么严重。
Java社区内充满了怀疑和否定论调,因为Java插件没有被广泛接受。更为搞笑的是,跟我聊过的开发者都希望插件被广泛接受。我希望改变这个现象,不仅仅因为我开发的Galileo需要Java插件的广泛认可,更因为随着RIA市场的持续增长我希望作为Java开发者能够得到更多的就业机会。
为何Java插件落到如此境地?
我分析认为Java插件的失败有以下几个原因。1,插件和小程序是在大多数人使用拨号连接网络的时代被公众认识的,下载一个插件或小程序所耗费的时间超出了普通开发者的耐心;2,比较起一个用图形技术设计的HTML语言,一个Swing的UI看起来巨傻;3,平台和浏览器的兼容也是个问题;4,插件不太好安装,非开发者操作有难度;5,web自身还很年轻,RIA的理念还不普及,因此已经有了HTML,网站为什么还要再改什么呢?(使用Java插件)会增加复杂的应用,限制了潜在网络用户,而且看起来很傻,网站为什么要这么做?
Java插件能否更具竞争力
我对此表示乐观:
1, 根据我读到的最新数据,86%的美国网络用户现在使用的是宽带,因而JAR文件和其他资源的下载时间可以忽略不计;
2, Sun终于决定重写插件使之易于检测、下载、安装和升级。而且在需要插件的页面,浏览器会用常规的方式提示用户下载;
3, 有Java插件的新的操作系统和电脑即将来临,我知道Dell的Windows Vista如此,Apple的Mini-Mac如此;
4, 对用户来说安装插件已不是什么麻烦事。根据2008年6月的调查,99%的可上网的台式机/笔记本已经安装了Flash插件,85%安装了Java;
5, 标准的HTML网站已不能满足要求。为了更具竞争力,网站需要紧跟最新的技术脚步来融合RIA。带有零星JavaScript的常规HTML网站可以以图形技术和non-developer的形式开发,而RIA由于其实现的复杂性则需要专业开发者。旧时图形技术和non-developer模式推动了HTML的发展,今日随着RIA的增长,开发者(大部分是Java开发者)将推动RIA的发展,这无疑是 Java的机会;
6, 许多像Galileo产品的出现,既能方便简单地开发UI,又能带来和HTML/CSS开发的UI一样的外观,美观将不再是Java UI的问题。
我跟http://www.coreservlets.com的Marty Hall聊过这个问题,他的回答是:
“希望基于Java的解决方案能在RIA方面表现的更好。我从事Ajax培训多年,Ajax对于开发者而言太太复杂。开发者必须学习xhtml,html,XML, JSON, JavaScript, Prototype以及其他37种脚本JavaScript函数库,还要具备服务器端技术(servlets/JSP, PHP, ROR,活着其他)。即使具备像GWT或者JSON-RPC之类的整合技术,也仍然有许多非常恐怖的底层技术需要掌握,而且在现有浏览器的支持下界面也有限。所以,越多有吸引力的应用,人们越会安装Java。”
我认为机会的大门已经向Java插件第二次敞开。看起来Sun也这么认为,因为他们已经率先设计插件创建 JavaFX。然而,恕我直言,如果Java开发者认为仅仅靠Sun的努力Java插件就会成功,那就大错特错了。Java插件如果想要取得成功,Java社区的每一分努力都非常重要。