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