前 言
RIA是什么
RIA是Rich Internet Application的縮寫,意為富互聯網應用,引申為富客戶端應用。那么,RIA意味著什么呢?在回答這個問題之前,我們不妨先回顧一下從大型主機時代開始,應用軟件系統發展至今所走過的歷程:

圖中的兩個坐標軸,分別代表Rich和Reach,即應用軟件的界面表現力和應用軟件所能影響到的人群。
1.主機時代,界面表現力和用戶數量無疑是最低的。少量的用戶使用啞終端操作計算機。
2.隨著計算機制造成本的降低,尤其是個人計算機的普及,使得軟件行業出現了一種新的部署結構:客戶機負責提供豐富的用戶界面、承擔業務邏輯,在服務器上集中存儲數據。這一階段被稱為C/S(Client/Server)時代。
3.C/S結構最大的問題是部署和維護成本極高,一旦用戶界面或者業務邏輯發生變化,便需要更新分布在每一臺客戶機上的軟件。因此,B/S(Browser/Server)結構應運而生。在B/S結構中,客戶端程序統一運行在Web瀏覽器中,用戶界面由服務器程序渲染生成,客戶端程序只負責展現。部署成本的降低,使得應用軟件的用戶數量激增:互聯網能達到的地方,都可能出現你的用戶。
4.B/S結構至今被人褒貶不一。首先,客戶機的計算能力幾乎被廢棄了,這是一種浪費;其次,用戶界面的表現能力受制于Web瀏覽器,比起C/S結構發生了倒退。那么,能否創造一種在應用軟件的界面表現力和部署成本之間雙贏的局面呢?這就是所謂的RIA。
富客戶端應用也稱胖客戶端應用,是相對于B/S時代的瘦客戶端應用而言的。在RIA時代,一個運行于Web瀏覽器中的客戶端應用,要上升為富客戶端應用,應該具備三個條件:
? 不輸給桌面應用的、具有豐富效果的復雜用戶界面。
? 有能力調度服務端的業務邏輯,自行組裝所需要的用戶界面,而不是一味地由服務端渲染生成用戶界面。
? 在一定程度上突破Web瀏覽器的限制。例如,在必要時能接收服務器推送來的數據,這意味著打破“瀏覽器請求、服務器響應”的單調格局。又例如,在必要時能在客戶端存儲部分數據——這是無與倫比的一次跨越,一旦擁有存儲能力,富客戶端應用便能在離線狀態下繼續為用戶提供服務。
JavaScript能為RIA做什么
接下來,我們從技術方面分析RIA所能選擇的實現手段。筆者歸納,致力于富客戶端這一技術領域的IT廠商大致可以劃分為以下4個陣營。
? 微軟陣營:鑒于微軟是個人計算機操作系統的最大供應商,出于強化個人計算機地位的初衷,一直致力于富客戶端應用開發技術的研發,這一點從其新近于.NET Framework 3.0中集成的WPF,伴隨著Windows Vista推出的Windows邊欄Gadgets,以及 Silverlight 等概念中便可見一斑。再加上原有的.NET WinForm、Win32 Application、ActiveX 等,微軟真不愧是樂此不疲的客戶端應用開發技術的“高產戶”。其中的ActiveX和Silverlight屬于Web瀏覽器插件技術,非常有可能在RIA市場上搶到一些份額。
? Adobe陣營:Adobe緊鑼密鼓地推出Apollo計劃,在其集成開發環境Flex Builder中,使用ActionScript既能開發運行于Flash Player中的Flash,又能開發運行于桌面的AIR應用。由于Flash已經無處不在,Adobe是非常令人看好的一股力量。
? Sun 陣營:提到 Sun 的大名,自然令人想到 Java。沒有人奢望 JavaFX 及SWT/Swing/AWT能撼動微軟和Adobe,但是在桌面應用方面形成三足鼎立的局面還是值得期待的。在瀏覽器應用方面,Applet和Java Web Start已經積累下一些成功案例。
? Google、Mozilla陣營:Google是云計算和SaaS(Software as a Service)的領導廠商;Mozilla 則擁有技術領先的 Web 瀏覽器。這是唯一沒有推出自己的桌面應用開發技術,而把全部的賭注押在Web上的陣營。JavaScript+HTML+CSS的組合,遠沒有Silverlight和WPF看起來那么光彩照人,也不像Apollo計劃那么活力四射。但是,正是這一組合,讓微軟不由得發出“Silverlight 最大的對手是 JavaScript”的感慨。也正是憑借著這一組合,Google開發出了GMap、GMail、GTalk等令人大開眼界的應用。出于自信,Google認為,未來RIA的平臺標準已經確立了,那就是Web。
在琳瑯滿目的實現方式中,JavaScript 在其中巧妙地穿針引線,扮演著“黏合劑”的作用。JavaScript與各種瀏覽器插件技術(Silverlight、ActiveX、Flash、Applet)均擁有互操作能力,無論這種插件技術是主流的、還是生僻的,是傳統的、還是現代的。
JavaScript是唯一不需安裝任何插件,便被各大主流Web瀏覽器支持的動態腳本,可謂擁有天然的跨平臺性。未來之RIA,必是以JavaScript為核心!
本書的內容
本書旨在向讀者推介以 JavaScript 為核心的 RIA 開發。讀者將能從本書中發現, JavaScript 如何整合各種技術流派,開發出名副其實的RIA:具有復雜用戶界面,以Ajax方式異步調度服務端業務邏輯、自行組裝所需的用戶界面,同時突破Web瀏覽器的限制,具備長連接和離線能力。
全書共分30章、1個附錄。內容如下:



如何使用本書
本書共分為5篇:
? JavaScript基礎篇:介紹JavaScript的語法和基礎應用。如果不打算深究JavaScript幕后機制的話,運用本篇的知識便能勝任一般的JavaScript開發了。
? JavaScript 高級篇:揭示 JavaScript 的運行機理和高級應用,如面向對象編程、函數式編程和元編程。
? Ajax篇:Ajax是上帝賜予JavaScript的禮物。憑借著Ajax,JavaScript擁有了異步調度服務端業務邏輯的能力。本篇除介紹Ajax原理和通用框架之外,還分別為從事Java和.NET開發的程序員安排了適合他們的DWR、Atlas框架。
? Ext篇:能否提供復雜用戶界面,是RIA的一個重要判定標準。在本書中,筆者把這一重任交給了Ext。希望讀者能夠基于Ext開發出不輸給桌面程序的Web應用。
? 增值篇:增值篇是本書的華彩樂章。在這一篇中,讀者們將看到JavaScript如何游刃有余地整合各種技術流派,包括 Flash、Applet、Silverlight、ActiveX 等,如何開發反向Ajax程序、Comet程序和具備離線能力的程序。
請讀者關注上述的本書內容組織方式,基于這一方式,造成同類知識有時會分散在不同章節中的現象。而造成這一現象的深層次原因,則在于RIA技術選型實在太廣泛了。希望讀者能夠融會貫通。
例如Function對象。在JavaScript基礎篇中僅僅把Function作為JavaScript語法中的一個知識點,而在JavaScript高級篇中則應該將其理解為JavaScript高級編程的精髓所在。
又例如反向Ajax和Comet模式這一對具有內在聯系的概念。在“適用于Java的Ajax框架——DWR”一章中首次引出反向Ajax這一概念;在“Comet(Server Push)模式”一章中再度實踐了一次反向 Ajax;而在“用 JavaScript 操作 ActiveX 插件”和“JavaScript與ActionScript的互操作”兩章中,利用ActiveX和Flash技術再次分別實現了Comet模式。
本書源代碼可以在 http://www.broadview.com.cn 下載。限于水平,本書難免存在錯誤和不當之處,歡迎反饋您的寶貴意見至:t-c-b@163.com。
在RIA和JavaScript開發領域,不存在深奧的理論,有的只是動手實踐的快樂。筆者和同事楊先亭是懷著輕松愉悅的心情完成本書的,也祝大家閱讀愉快!
最后,在兩句略具調侃韻味的口號聲中結束本文。
全世界計算機,聯合起來!
以JavaScript為核心,奪取RIA開發的更大勝利!
涂傳濱
2008年12月27日于廈門
- Practical Data Analysis Cookbook
- Learning Cython Programming(Second Edition)
- JavaScript修煉之道
- 高效微控制器C語言編程
- Pandas Cookbook
- Data Analysis with IBM SPSS Statistics
- The DevOps 2.4 Toolkit
- Internet of Things with ESP8266
- C# 7.1 and .NET Core 2.0:Modern Cross-Platform Development(Third Edition)
- Mastering PowerCLI
- Python編程快速上手2
- Elasticsearch Blueprints
- 3ds Max 2018從入門到精通
- VMware vSphere Design Essentials
- Ionic Framework By Example