【IT168 专稿】现在新Web技术层出不穷,加之各个技术厂商不遗余力的宣传自家技术的优势,对开发者来说,现在创建富体验Web应用时,到底选择哪一种技术是一件费脑子的事情。真正的挑战是许多有趣的新Web技术由不同的组织推广,对于一个开发者或设计者来说比较困难的一件事情是,如何从中选出一款实用且不会过时的技术。
一般来讲,开放技术通常比专有技术更普及、生命周期更长,而后者则往往能够比较及时的支持高级功能。因此,Web应用开发者需要坚持实用第一,尽可能的选择开放技术,但是在某些特殊情况下,也应该能够毫不犹豫的选择专有技术。这种选择与开放或其它信仰无关,而只是为了选择一种合适的技术,来最大化目标应用程序取得成功的可能性。换言之,这不应该是一个私人和情绪化的选择,而是一个业务和理性的选择。
对于今天的主流富Web应用来说,主要有两大技术可用:Flash和Open Web(诸如HTML、CSS、JavaScript、SVG等)。虽然SilverLight和JavaFX肯定也是非常有意思的技术,但它们依然是未被事实验证过的Web事物,本文出于简化考虑,将重点讨论Flash和Open Web。
由于多年研究该问题,并且在两个阵营都花费了较长时间,我可以坦白的说双方各有自己的优势和不足,选择哪一个要取决于你的富Web应用的要求,你甚至可能需要同时使用它们。做出合理选择的技巧是,客观的了解每一个技术的优势和不足,不带任何个人情绪作出理性选择。
为了帮助解答何时用什么技术这个问题,以下是一个技术-功能列表,并附上简短解释。
SEO(Open Web)
尽管谷歌在索引Flash内容上取得了一些进展,针对Flash的SEO依然处于初级阶段,因此,如果你的应用程序需要依赖SEO来取得成功,你更好的选择是使用已知的URL和HTML非常好的实践。对于未使用任何未经验证的SEO技术的标准页面HTML内容来说,进行SEO也不是一件容易的事情。而一旦以错误的方式使用了Ajax,对SEO来说就是一件极具破坏性的事情。举例来说,在很多单页面Web应用中会使用“#”URL技巧,这可能就不利于SEO的实现。
移动Web(Open Web)
移动Web是另外一个Flash技术依然处于落后局面的领域。尽管Adobe在这个领域正在取得一些有希望的进展,如果你不是在创建一个2D游戏或视频/多媒体为中心的应用程序,就没有多少理由在已经非常强大的现代移动Web浏览器上再使用另外一个带来开支和不确定性的虚拟机。现在,多数新高端移动设备具有类似桌面的浏览器功能(通常是基于WebKit),它可以让开发者完全利用诸如Ajax和CSS 2.1+等Open Web技术。因此,最大化你的手机应用能力的非常好的方式是坚持使用Open Web技术,并根据简化版浏览器来设计你的Web用户界面。另外,开发者可以充分利用当今的移动应用商店来推广特定手机的应用,不过这并非本篇文章讨论范围,因此略过。
富HTML显示&编辑(Open Web)
尽管Flash 10中有一些技术可以简化HTML布局和编辑组件的开发,它依然与浏览器本身的功能相差甚远。有人猜测称Flash 11可能具有更好的HTML功能,甚至可能有嵌入式WebKit,但是就目前来说,如果你希望显示和编辑富HTML,毫无疑问,Web浏览器才是你的非常好的拍档。
按需性能(Open Web)
当用户首次访问一个Web应用时所获得的体验就是按需性能,此时该应用的任何信息不会出现在浏览器的缓存中。人们对个人Web应用常见的预期值是,响应时间不要超过1秒。如大家所知,解释型页面可以更有效的完成按需内容及交互的执行,而Flash应用模式的编译特点则在进行预加载执行时更具有优势。因此,对于那些要求快速交互体验的应用来说,Open Web模式更适合。
预加载性能(Flash)
相反,Flash和类似Flex等框架的编译方式,使它可以更优化地实现预加载交互。因此,如果你不介意在你的应用程序上有一个“进度加载条”,并且有一个高度执行性能需求,那么Flash可能是一个好的解决方案。值得提出的是,诸如谷歌Chrome V8和Mozilla火狐SpiderMonkey中的新JavaScript虚拟机,正在打破解释型语言性能的障碍。不幸的是,微软IE浏览器在语言性能方面依然处于落后状态。尽管我们认为微软也正在优化它们的JavaScript引擎,但是目前来说,获得高执行逻辑性能的非常好的方式是使用Flash ActionScript 3。
动画(Flash)
如果你希望画质流畅,那么Flash是你最好的朋友。尽管这个说法目前成立,不过你应该知道的重要一点是,通过现代浏览器(包括IE8)和诸如jQuery等Ajax工具,完全借助于Open Web技术的应用程序也可以具有还过的去的动画功能。不过,除非动画是应用程序的重要基石,它不应该成为选择哪一种技术的关键或决定性因素。
2D&3D(Flash)
这无疑是Flash的一个强项。尽管Open Web正在建立某些2D标准和实现(诸如Canvas和SVG等),但是在像素和矢量图形创建和管理方面,没有任何一个技术能够比Flash提供更高的性能和功能。尽管Canvas和某些SVG现在已经被火狐和其它基于WebKit的浏览器(苹果的Safari和谷歌Chrome等)所支持,但微软的IE浏览器却没有支持它们。开发者可以通过使用JavaScript或Flash库等兼容方式来回避微软这个限制,但是往往以牺牲功能和性能为代价。换言之,尽管以SVG/Canvas/VML建立一个在线版Photoshop或类似Visio的应用是可能的,但是使用Flash技术创建它所需要的投入肯定更具吸引力。不幸的是,Flash不支持解释型模式,因此Web开发者将不得不完全转向Flash开发模式和工具。尽管有一些有趣的Flash SVG库可以刚Web开发者使用Flash来展现SVG,或使用浏览器JavaScript虚拟机来运行脚本,但是这样做通常会以降低性能为代价。
文件处理(Flash)
文件处理功能一直完全被不同的Open Web标准和实现组织所遗忘。创建一个通过浏览器存取本地文件的有效体验一直是一个挑战。即时是最新的浏览器,其文件输入模块近允许一次选择一个文件。尽管在这方面Flash也难成完美,不过它在这个方面增加了一些不错的功能,诸如多文件选择功能,另外还增加了一个很重要的功能,可以在将文件从客户端发往服务器之前阅读它们的内容。另外一种选择是使用Java技术,Facebook在其图片上传程序中就使用了该技术,它通过签名applet几乎实现完整的文件系统控制。高级剪贴板支持是另外一个被忽视的需求。
视频/音频回放(Flash)
在HTML 5中有两个比较大的新功能,一个是离线支持,另一个则是视频和音频标签。不过,关于视频标签的支持格式,目前还存在一些争论。其中最大的问题之一是最好的视频格式往往具有版权,尽管诸如Adobe、微软和谷歌等商业厂商愿意为它们的用户支付视频税,而开源社区却发现自己处于“双环困境”(catch-22)中。因此,从一个应用程序开发者的角度来看,Flash是迄今为止能够为应用程序带来高品质视频和音频的非常好的选择。而且Flash最近还支持了H.264/mp4,就目前来说,没有什么比它更适合了。
如上所述,没有一种技术可以满足所有需求。根据应用程序需要,你可能需要组合使用多种技术。很明显,对于一个技术厂商来说,希望自己的技术被应用在尽可能多的场景中;而对于应用程序开发者来说,无论采用哪一种技术,唯一的目标就是确保应用程序取得成功,开发者在投入太多时间和金钱到某一种技术之前,应该理性、客观的评价每一种技术的优缺点。另外,在定义应用程序需求时,要真正关注用户关心的事情。