从“富客户端”(RIA)说到 Flex AIR
這年頭,“不是我不明白,這世界變化快”。客戶端一會兒“瘦”(thin)了,一會兒又“胖”(rich)了。
?? 當初從單機應用程序發(fā)展到網(wǎng)絡應用程序后,C/S架構的設計和開發(fā)應運而生。然而隨著應用向互聯(lián)網(wǎng)上遷移,客戶端數(shù)量劇增,維護和升級成為一件極其困難的事情。這個時候,人們想到了要給客戶端“瘦身”,就是把業(yè)務層邏輯交給服務器端來完成,客戶端僅僅完成人機交互界面和用于呈現(xiàn)運算結果。于是 B/S 模式誕生了,客戶端被瀏覽器所代替。
?? 然而,隨著開發(fā)和應用的發(fā)展,人們又發(fā)現(xiàn):B/S 應用因為有 HTML、CSS 和 Javascript 的支撐,又有 Flash 動畫助陣(最初還有 Java 的 Applet 等,后來敗下陣來),其界面雖然可以做得無比華麗,然而華而不實的東西實在太多,瀏覽器上的應用程序,其人機交互的感覺和效果怎么也比不上C/S類型的桌面應用程序。原因很明顯,“B”和“C”之間隔著一朵巨大的網(wǎng)絡“云”,連接它們的交換機和路由器,誰都不知道什么時候、什么原因就會減速甚至停止工作。更糟糕的是,進入B/S時代后,一直沒有一款像 B/S 時代的 Delphi 們那樣的全能開發(fā)工具。所有開發(fā)工具,要么專注于服務器端忽視客戶端,例如 Java、VS.NET;要么相反,例如 Dreameweaver、Flash。像過去邏輯編寫和界面制作可以用同一個工具幾乎同時完成的情況,在B/S開發(fā)中幾乎見不到了,B/S開發(fā)最終多了個“整合”的工作,就是把程序邏輯和界面腳本進行嵌套和融合,使它們能協(xié)同工作。好點的,例如 Struts 和 PHP 等,強調(diào)“模板”的概念,通過 MVC 框架把業(yè)務邏輯和界面完美隔離。差點的,例如最初 ASP 的開發(fā)形式,HTML、CSS、Javascript 代碼和后臺 VBScript 腳本交合在一起,完全是一種肉搏的狀態(tài)。
??? “瘦客戶端”還有一個致命的缺點,就是對服務器端造成的巨大壓力和對客戶端計算資源的浪費。本來可以在客戶端完成的運算非要送到網(wǎng)絡另一頭去完成,網(wǎng)絡帶寬和服務器資源同時被額外消耗了。
??? 于是,客戶端的技術空白就有了發(fā)展的必要和商機。首先是 Ajax 在 Web2.0 時代的突圍。Ajax 確實在改善瀏覽器用戶體驗方面出手不凡,表現(xiàn)卓越。有了 Ajax 技術,在與 Web 服務器進行少量數(shù)據(jù)交換時,瀏覽器不必出現(xiàn)一段時間的“休克”狀態(tài)。特別是類似“網(wǎng)頁聊天室”的應用,完全不用瀏覽器自己不停的刷呀刷呀的刷新自己。
??? 然而 Ajax 的力量還太單薄了。為了改善瀏覽器 Web 前端界面的交互性和提高開發(fā)效率,一些基于 Javascript 腳本的開發(fā)框架誕生了,例如 Ext 和 JQuery、Prototype 等。我們完全可以繼續(xù)采用 Javascript 原生代碼去編寫自己的代碼,甚至發(fā)誓建造我們自己的代碼庫直至形成另一個框架式的東西,但這些現(xiàn)有的、成熟的前端框架無疑提高了我們的開發(fā)效率,至少我們不必再去考慮瀏覽器的兼容性。
??? 在 Javascript 如火如荼的時候(“如火如荼”的例證就是2008年網(wǎng)頁游戲莫名其妙的轉(zhuǎn)熱),另一個Web前端技術-Flash的新東家 Adobe 自然不甘心坐失良機。Adobe 當初收買 Macromedia 的時候可能正是看中這一塊了。Dreameweaver 看起來沒有多少油水可粘了,因為許多人寫 Html 就是用記事本一類的純文本編輯器去搞。而 Flash 就不是誰隨便就能寫個工具就能在上邊搞二次、三次開發(fā)的了,盡管 Flash 的 API 和 SDK 號稱是公開的。事實上,現(xiàn)在我們見到的優(yōu)秀的 Flash 開發(fā)工具也不多,有個 Swish 軟件是用來快速制作 Flash 動畫的,被盜版得不成樣子。PHP 4.0以后,后臺提供一個 ming.dll 庫,提供 Flash 的后臺生成,但似乎用的人也不多。
??? 于是,Adobe 在收購 Macromedia 后,加快了研發(fā)“富客戶端”(RIA)開發(fā)工具的步伐。
??? Flex系列產(chǎn)品包括編譯工具和IDE(Flex Builder),通過編寫MXML(一種類XML標記語言)和ActionScript(AS,Flex的腳本語言,從Flash移植過來)代碼,用編譯器來生成SWF文件,使用瀏覽器的Flash Player插件就可以進行觀看。
??? 隨著 Flex3.0 的推出,Flash Player 升級到 9.0 版本,并號稱包含一個真正的“虛擬機”。ActionScript 發(fā)布了3.0版本,開發(fā)工具也升級到 Flex Builder3.0。
??? 特別是為了支持真正的客戶端應用開發(fā),Adobe 開發(fā)了被人贊為“激動人心”的 AIR(Adobe Integrated Runtime)平臺,中文釋義為“Adobe運行時環(huán)境”。Adobe 官方的解釋是:
AIR 是一個跨操作系統(tǒng)運行時, 可以使開發(fā)人員能夠使用熟悉的 Web 技術 (包括 HTML、Ajax、Adobe Flash 和Adobe Flex)來構建桌面上的豐富的互聯(lián)網(wǎng)應用程序。借助 Adobe AIR, 開發(fā)人員可以使用他們的現(xiàn)有技能和工具來構建引人入勝的、視覺效果豐富的應用程序, 這些應用程序?qū)⒈镜刭Y源的強大功能與 Web 的觸及力結合到一起。
??? 很明顯,不像 Flash 主要是作為網(wǎng)絡應用運行在瀏覽器里,AIR 程序是類似“計算器”一樣的桌面程序。而且更像 Java 桌面程序是運行在 java 虛擬機里一樣,AIR 應用正是運行在 AIR 這個虛擬機平臺上。AIR 程序跨操作系統(tǒng)操作、網(wǎng)絡通信等低級服務都由 AIR 來代勞,于是 AIR 應用也號稱“平臺無關”。
??? 但是 Adobe AIR - 現(xiàn)在正式版是1.1版本,最新測試版是 1.5版 - 現(xiàn)在的功能還十分有限,FB3.0 開發(fā)工具只提供了 6 個組件,這 6 個組件離開發(fā)一個強大的桌面應用差的還很遠。現(xiàn)有的6個組件,能實現(xiàn)一些基本功能,但離“好用”的目標還有距離,例如那個文件系統(tǒng)的 Tree 控件就很丑陋 - 不僅僅是界面丑陋,功能也停留在 Windows 早期的水平上,根本不能模擬到當前 Windows 資源管理器的樣式,在里面根本找不到“桌面”“我的電腦”等樣式。模擬可能不是根本辦法,將來需要能夠引用 ActiveX 等 Windows COM 組件才是根本出路。但是對于“跨平臺”的 AIR 來說,Linux、MAC 平臺怎么辦?如果每個操作系統(tǒng)、每個文件系統(tǒng)都搞一套組件,那代價何其大呀!
??? 最后說說寫這個命題的來由:本人最近經(jīng)常上一些 SNS,最常去的就是“海內(nèi)網(wǎng)”(http://www.hainei.com)。最近“海內(nèi)”改版后,上傳相片里多了一個“高級上傳工具”,本人最初以為是用 Flex AIR 技術開發(fā)的,然后用 FB3.0 去模仿,結果發(fā)現(xiàn) FB3.0 的 AIR 組件很差勁,網(wǎng)絡上也搜不到類似的第三方組件。后來才發(fā)現(xiàn)海內(nèi)用的是 ActiveX 組件“ImageUploader5.ocx”。看來直到現(xiàn)在,如果想在 Windows 下開發(fā)一些高級的應用(例如瀏覽器插件),還是離不開 COM 組件技術,盡管現(xiàn)在“.NET”很流行。同時可以看到,Adobe 公司要實現(xiàn)自己的宏圖大業(yè),還有很長的路要走(別忘了微軟基于.NET的Silverlight現(xiàn)在已經(jīng)奮起直追了)。但 Flash 精致的動畫界面、豐富的感官呈現(xiàn)與桌面程序的完美結合,還是很值得我們期待。
本文轉(zhuǎn)自網(wǎng)眼51CTO博客,原文鏈接:http://blog.51cto.com/itwatch/286432,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結
以上是生活随笔為你收集整理的从“富客户端”(RIA)说到 Flex AIR的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。