作者:蔡學鏞
近年來,RIA是一個相當時髦的名詞。RIA的R與A分別是Rich與Application的意思,至於I的解釋比較多種,依據各個廠商的強調重點不同,I可以做Internet、Interactive、或Interface解,分別強調網路連結、高互動、以及美觀的介面。我認為RIA的I應該同時兼具這三者,欠缺任何一者的技術,都不應該稱為RIA。
RIA是在Web革命浪頭下的技術,因此不免要和Web扯上關係。而RIA之所以強調Rich,正是因為傳統Web技術太過於Poor,畢竟以往的Web使用被動的網路連結(採用pull技術)、互動性不佳(任何動作都要到送到後端,甚至整個頁面換掉)、介面不好看(HTML是文字導向的介面語言)。
RIA是一種開發技術,而不是一種末端應用,而Rich是一種比較的結果,和靜態網頁技術相比(這裡指的靜態網頁技術,是指瀏覽器端沒有執行任何程式),Ajax稱得上Rich,因此有些人也會將Ajax歸類為RIA。但是和WPF/Silverlight、AIR/Flash等富豪之家相比,小巫見大巫,Ajax只能算是家境小康,不能算是Rich。就像是,郭台銘雖然Rich,但遇上世界首富Bill Gates,也只能俯首稱臣。
真正Rich的應用,在RIA一詞出現之前,我們老早就看過許多。那些極度耗費3D顯示卡和CPU運算能力、聲光效果極佳、讓青少年在網咖流連忘返的線上遊戲,可是說是Rich Internet/Interaction/Interface的極致,為何我們不稱這些線上遊戲為RIA?
重點在於它們沒和Web扯上關係。因此,當RIA的I被解釋成Internet時,指的可不是TCP/IP而已,而必須是標準的Web protocol(也就是HTTP)才算是。當RIA的I被解釋成Interface時,也要盡量和Web相容。
為了盡量和Web相容,RIA最基本的作法是,將執行環境(Runtime Environment)設計成瀏覽器的插件(Plug-in),讓各式各樣的應用可以在上面執行。
這聽起來根本就是十多年前的Java Applet,儘管當時尚未出現RIA這個流行詞彙。Java一開始之所以吸引大家的注意,正是因為Java Applet。但是由於諸多問題(啟動時間太長、執行效能太差、為Applet簽署太麻煩),Java Applet終究是未能在市場上大放異彩。
而技術市場就是這樣,幾年之後你會看到舊的觀念和技術捲土重來,只是換個名字。隨著Flash的成功,他們不滿足Flash只能做動畫,希望讓Flash能成為威力的程式平台,於是Adobe提出RIA的觀念,並預計在明年年初推出AIR(Adobe Integrated Runtime)。事實上AIR/Flash和Java Applet的概念是一樣的。
接著微軟也進入RIA市場,推出WPF/Sliverlight;接著Java也準備捲土重來,推出JavaFX。一時之間,RIA鬧熱滾滾。
這RIA三強(或者說兩強一弱)還有三個共同的特點:
- 在瀏覽器內和瀏覽器外執行皆可
- 上線和離線執行皆可
- 都意圖同時支援各種裝置(PC、手機…)
對於「開發者」來說,這三者共同的特點是:Client端的「GUI描述」和「程式邏輯」分開,「GUI描述」改用宣告(declarative)的方式。但是三者的開發理念仍有不同之處。我認為從語言的角度來看,JavaFX比另外兩者先進,因為JavaFX使用DSL(Domain-Specific Language),而非XML。JavaFX是專為設計GUI而打造的語言。
目前Flash的普及率約96 %,Java約87 %。至於.NET,我找不到相關的數據,但推估應該小於50 %,因此短期內Adobe應該還是贏家。但是,依據歷史,微軟總有後發先至的本事,我估計三五年後,WPF/Silverlight可能會勝出。至於JavaFX,雖然是好語言,但搭配不好的平台和不好的行銷,以及落後對手的時程,未來發展恐怕不樂觀。
儘管大家都將RIA的目光放在Adobe、微軟、Java的三大技術上,但我希望大家不要忽略了一些小廠商推出的優秀RIA技術,其中我尤其推崇Curl(http://www.curl.com/),我稱它為「RIA的另類療法」。你可以下載Curl SDK,安裝之後看看他們線上的demo,甚至有3D的範例。
你可能會很喜歡Curl的技術,但是要用Curl開發商業應用還是要三思。因為每個新客戶都必須下載安裝他們的執行環境,多一道手續就可能少一些客戶。有些疑神疑鬼的人(我就是),相當排斥安裝來路不明的軟體。另外,Curl的商業授權相當貴(這年頭敢把開發工具軟體定價這麼貴,需要相當程度的「勇氣」,或許這也反映出它們對於自己產品的信心)。
你可能納悶,為何你喜愛的某Open source語言(例如Ruby),不推出Plug-in,讓你可以寫RIA程式。重點在於,大多數open source語言沒有自己的GUI套件,都是依賴外部的套件(例如TK),這些外部GUI套件又相當龐大,根本不適合當作RIA Solution。所以想開發RIA系統,你還是得從目前浮出檯面的技術中做抉擇。
