|
筆者自2003年首次聽(tīng)到Macromedia公司提起RIA(富互聯(lián)網(wǎng)應(yīng)用)一詞到現(xiàn)在整整7年了。一度被認(rèn)為是互聯(lián)網(wǎng)應(yīng)用趨勢(shì)的RIA經(jīng)歷了7年之癢,但仍然沒(méi)有在互聯(lián)網(wǎng)上得到大規(guī)模普及,特別是企業(yè)應(yīng)用就更加少見(jiàn)。做個(gè)不恰當(dāng)?shù)谋扔鳎瑐鹘y(tǒng)基于Html的應(yīng)用就像互聯(lián)網(wǎng)應(yīng)用中的綠葉一樣,而RIA技術(shù)由于酷炫的用戶(hù)體驗(yàn)效果就像是美麗的花朵。現(xiàn)在開(kāi)心網(wǎng)和騰訊QQ等商業(yè)應(yīng)用中已經(jīng)運(yùn)用了RIA技術(shù)在其社交網(wǎng)站中得到應(yīng)用,但這畢竟還是少數(shù),大多數(shù)互聯(lián)網(wǎng)應(yīng)用特別是企業(yè)級(jí)應(yīng)用仍然選擇傳統(tǒng)高穩(wěn)定性與高響應(yīng)能力的Html應(yīng)用路線,那未來(lái)的互聯(lián)網(wǎng)應(yīng)用,特別是企業(yè)應(yīng)用能夠迎來(lái)RIA的春天,綻放出漫山遍野的花朵呢?
還記得2000年剛接觸Flash開(kāi)發(fā),發(fā)現(xiàn)ActionScript可以通過(guò)面向?qū)ο蟮姆绞綄?shí)現(xiàn)MIS系統(tǒng)應(yīng)用,但Macromedia公司對(duì)Flash的定位仍然是面向設(shè)計(jì)人員,在面向開(kāi)發(fā)方面的進(jìn)展不得不用緩慢來(lái)形容,直到2004年在被Adobe公司收購(gòu)的頭一年才真正意義上推出了面向開(kāi)發(fā)者的Flex 1.0版本。筆者雖然對(duì)當(dāng)時(shí)FLEX Store應(yīng)用所振奮,但很快發(fā)現(xiàn)其第一個(gè)版本在大數(shù)據(jù)量下低迷的表現(xiàn)。
而Flash+AS和FLEX這兩條路線,使得開(kāi)發(fā)者很難去抉擇。當(dāng)我還在一邊看著LUAR編寫(xiě)的《Flash MX 2004 ActionScript 2.0與RIA應(yīng)用程序開(kāi)發(fā)》,LUAR本人卻在博客上發(fā)表了《Flash未來(lái)未有來(lái)》的文章,作為中國(guó)Flash應(yīng)用開(kāi)發(fā)的領(lǐng)軍人物,主動(dòng)得出"Flash沒(méi)有幫助開(kāi)發(fā)者開(kāi)發(fā)RIA"的結(jié)論。當(dāng)然現(xiàn)在的Flash經(jīng)過(guò)10年的苦心經(jīng)營(yíng),應(yīng)用已經(jīng)非常廣泛,特別是在一些Web頁(yè)面的應(yīng)用上面。
RIA技術(shù)選型
2008年,中國(guó)人壽養(yǎng)老保險(xiǎn)公司提出開(kāi)發(fā)面向企業(yè)客戶(hù)的養(yǎng)老金精算咨詢(xún)系統(tǒng)(PACS),但由于養(yǎng)老金咨詢(xún)中的方案數(shù)據(jù)采集與精算過(guò)程非常復(fù)雜,使用傳統(tǒng)B/S架構(gòu)很難實(shí)現(xiàn)。由于多年來(lái)的RIA開(kāi)發(fā)經(jīng)歷,作為項(xiàng)目經(jīng)理的我提出在此項(xiàng)目中嘗試使用RIA技術(shù)進(jìn)行開(kāi)發(fā),以到達(dá)客戶(hù)友好性與易用性的目的。微軟發(fā)布一年的Silverlight引起了項(xiàng)目組的注意,由于企業(yè)B/S開(kāi)發(fā)的兩大陣營(yíng),一個(gè)是Java,另一個(gè)是.NET平臺(tái)。
針對(duì)主流RIA技術(shù)筆者進(jìn)行了對(duì)比,當(dāng)時(shí)Java平臺(tái)的JavaFX仍然處于beta階段,而在此前筆者已經(jīng)在一些項(xiàng)目中運(yùn)用了ExtJS等通過(guò)JS實(shí)現(xiàn)的類(lèi)RIA應(yīng)用,但實(shí)際開(kāi)發(fā)效率較低,而且腳本出錯(cuò)概率較高,JS調(diào)試相對(duì)困難,企業(yè)架構(gòu)要求的穩(wěn)定性得不到很好的保障。因此,我們將目光集中在了.NET框架下的Silverlight上,經(jīng)過(guò)與微軟中國(guó)的多次溝通交流,并進(jìn)行了必要的性能測(cè)試。以下是通過(guò)實(shí)際測(cè)試當(dāng)中的性能對(duì)比(對(duì)比基準(zhǔn)為Flash):
測(cè)試一:后臺(tái)運(yùn)算性能測(cè)試,使用相同的素?cái)?shù)查找算法
測(cè)試項(xiàng)目 | Silverlight | Flash |
查找100萬(wàn)以?xún)?nèi) | 單線程:0 .423 秒 雙線程: 0.267 秒 | 1.335秒 |
查找1000萬(wàn)以?xún)?nèi) | 單線程 9.833秒 雙線程: 6.144 秒 | 35.62秒 |
在線測(cè)試及源代碼下載地址:http://www.itwriting.com/primetest
測(cè)試二:UI性能測(cè)試,使用小球碰撞模擬
測(cè)試項(xiàng)目 | Silverlight2 | Silverlight 3(cached) | Flash | Flash(cached) |
16個(gè)小球 | 238FPS | 116FPS | 64FPS | 64FPS |
32個(gè)小球 | 133FPS | 112FPS | 54FPS | 64FPS |
64個(gè)小球 | 62FPS | 107FPS | 41FPS | 64FPS |
128個(gè)小球 | 35FPS | 99FPS | 18FPS | 57FPS |
在線測(cè)試及源代碼下載地址:http://bubblemark.com
注:在最新公布的Silverlight 4.0中,官方指出UI線程性能提升了5.5倍,Worker線程處理性能提高870倍。
這里要特別說(shuō)明一個(gè)問(wèn)題,Silverlight與Flash本身的運(yùn)行時(shí)都在客戶(hù)端,以前我也在Silverlight發(fā)布會(huì)中提出Silverlight后臺(tái)語(yǔ)言支持能力更強(qiáng),但被很多人誤認(rèn)為是服務(wù)器端語(yǔ)言,其實(shí)Silverlight與Flash一樣可以通過(guò)多種網(wǎng)絡(luò)協(xié)議連接不同技術(shù)架構(gòu)的服務(wù)端程序,但就客戶(hù)端的運(yùn)行時(shí)來(lái)說(shuō),Silverlight是基于.NET的JIT Compiler的,而且有CLR基礎(chǔ)類(lèi)庫(kù)支持,所以與Flash前端運(yùn)行時(shí)有很大差別。
Silverlight 實(shí)現(xiàn)RIA端到端的優(yōu)勢(shì)
談到微軟專(zhuān)門(mén)為Silverlight包裝的Core CLR運(yùn)行時(shí)環(huán)境,就不得不說(shuō)到整個(gè).NET框架的優(yōu)勢(shì),很多人將.NET CLR與 JRE做比較,兩者都具有相當(dāng)強(qiáng)大的基礎(chǔ)類(lèi)庫(kù)支持,可以說(shuō)為企業(yè)開(kāi)發(fā)提供了基礎(chǔ),而Silverlight享受到了這樣的基礎(chǔ)類(lèi)庫(kù),但為了減小運(yùn)行時(shí)文件大小,提高用戶(hù)下載安裝體驗(yàn),微軟去除了無(wú)用的服務(wù)器端基類(lèi),保留了主要的客戶(hù)端類(lèi)庫(kù),下面我將結(jié)合Core CLR來(lái)說(shuō)明Silverlight在企業(yè)級(jí)開(kāi)發(fā)中的優(yōu)劣勢(shì)。
下表是筆者總結(jié)的在企業(yè)級(jí)應(yīng)用開(kāi)發(fā)方面Silverlight的優(yōu)勢(shì):
其中最為重要的一點(diǎn)就是前端Core CLR的支持,大家可以參見(jiàn)MSDN來(lái)獲得Silverlight 4基礎(chǔ)類(lèi)庫(kù)的全部資料。
本文不會(huì)對(duì)CoreCLR做過(guò)多介紹,結(jié)合客戶(hù)端架構(gòu)將Silverlight主要基礎(chǔ)類(lèi)庫(kù)總結(jié)如下:
層次 | 基類(lèi)庫(kù)支持程度 |
XAML表現(xiàn)層 | 豐富的原生控件(System.Windows.Controls 超過(guò)100種控件類(lèi))與自定義控件庫(kù)( System.Windows.Controls. UserControl),支持全局樣式修改與資源管理(System.Resources),支持動(dòng)畫(huà)(System.Windows.Media.Animation),效果(System.Windows.Media.Effects) |
客戶(hù)端控制邏輯層 | .NET Framework多種基本類(lèi)庫(kù)支持,包括多線程類(lèi)庫(kù)(System.Threading),安全類(lèi)庫(kù)(System.Security),反射類(lèi)庫(kù)(System.Reflection),Linq類(lèi)庫(kù)(System.Linq),數(shù)據(jù)流操作類(lèi)庫(kù)(System.IO),XML操作類(lèi)庫(kù) |
通訊層 | 包括ADO.NET交互類(lèi)庫(kù)(System.Data.Services),WCF交互類(lèi)庫(kù)(System.ServiceModel),網(wǎng)絡(luò)類(lèi)庫(kù)(System.NET )等等 |
而使我們選擇Silverlight的另外一點(diǎn)是,結(jié)合.NET服務(wù)器端技術(shù),可以在一個(gè)技術(shù)體系下構(gòu)建端到端的RIA應(yīng)用,在開(kāi)發(fā)上由于語(yǔ)言的一致性可以共享類(lèi)庫(kù),而同樣的IDE環(huán)境能夠提供方便的前后端一體化調(diào)試功能等功能。
通過(guò)Silverlight如何加強(qiáng)數(shù)據(jù)展現(xiàn)能力
要構(gòu)建企業(yè)級(jí)應(yīng)用,就必須要使得數(shù)據(jù)的展現(xiàn)和編輯更加方便直觀,傳統(tǒng)基于HTML標(biāo)簽語(yǔ)言的web應(yīng)用,可以通過(guò)input和Table等來(lái)實(shí)現(xiàn)數(shù)據(jù)編輯與展現(xiàn),但無(wú)法超出其能力之外,很多第三方的Web應(yīng)用控件都是利用JS腳本來(lái)實(shí)現(xiàn)排序,拖拽等效果,但腳本語(yǔ)言畢竟是低效的,并且具有許多外部原因(如瀏覽器環(huán)境等)使得其穩(wěn)定性不高,而Silverlight原生的控件在數(shù)據(jù)展現(xiàn)與編輯上面具有良好的表現(xiàn)。
以PACS系統(tǒng)中的數(shù)據(jù)列表為例,使用Silverlight的DataGrid控件,原生支持列排序,列拖拽,也可以通過(guò)代碼實(shí)現(xiàn)過(guò)濾,分頁(yè)。由于我們?cè)谝恍?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用場(chǎng)景中需要對(duì)每一條記錄都有對(duì)應(yīng)的處理流程和功能按鈕,因此使用DataGrid控件中定義行模板(DataGrid.RowDetailsTemplate)就可以實(shí)現(xiàn)自定義行樣式的效果。而在< DataTemplate />中你可以加入任何XAML元素,使得Silverlight應(yīng)用可以簡(jiǎn)單快速的實(shí)現(xiàn)以前難于實(shí)現(xiàn)的效果。
當(dāng)然除了數(shù)據(jù)列表的展現(xiàn)方式,Silverlight提供更多的圖形化展現(xiàn)方式,比如原生的各種統(tǒng)計(jì)圖表,以下是Silverlight的Chart控件應(yīng)用,在拖動(dòng)各種參數(shù)時(shí),圖表將以動(dòng)畫(huà)形式變換,而不需要寫(xiě)任何代碼。
Silverlight Do It in Naturally
除數(shù)據(jù)展示以外,在傳統(tǒng)WEB應(yīng)用中,可能會(huì)遇到更多的數(shù)據(jù)錄入上的限制,比如一種分段設(shè)置參數(shù)的應(yīng)用場(chǎng)景,當(dāng)我們要輸入任意年齡段的對(duì)應(yīng)參數(shù)時(shí),傳統(tǒng)Web應(yīng)用沒(méi)有好的解決方案,可能只會(huì)通過(guò)下面的方式來(lái)進(jìn)行數(shù)據(jù)錄入:
但如果使用Silverlight自定義控件就可以實(shí)現(xiàn)如下更加人性化的設(shè)計(jì):
通過(guò)點(diǎn)擊就可以簡(jiǎn)單實(shí)現(xiàn)在分段的中間插入分段,拖拽就能刪除分段,這樣的設(shè)計(jì)符合"do it naturally"用戶(hù)體驗(yàn)設(shè)計(jì)原則。而且Silverlight"一切皆為用戶(hù)控件"的思路,使得開(kāi)發(fā)者可以很簡(jiǎn)單的開(kāi)發(fā)一個(gè)用戶(hù)控件,而且這些用戶(hù)控件可以被整個(gè)項(xiàng)目充分復(fù)用。
"體驗(yàn)先行"的開(kāi)發(fā)流程
Silverlight基于"體驗(yàn)先行"的設(shè)計(jì),顛覆了傳統(tǒng)業(yè)務(wù)需求模式,改變傳統(tǒng)開(kāi)發(fā)流程,是開(kāi)發(fā)團(tuán)隊(duì)可以選擇以界面而非功能為起點(diǎn)的開(kāi)發(fā)模式。在PACS項(xiàng)目需求分析中,我們沒(méi)有采用需求規(guī)格說(shuō)明書(shū)面向功能的闡述方法,因?yàn)闃I(yè)務(wù)與IT的認(rèn)識(shí)隔閡往往會(huì)導(dǎo)致項(xiàng)目失敗。在Silverlight設(shè)計(jì)工具Blend中包含了原型開(kāi)發(fā)工具SketchFlow,通過(guò)簡(jiǎn)單的原型控件拖拽就可以快速開(kāi)發(fā)系統(tǒng)原型,使得業(yè)務(wù)部門(mén)迅速理解界面與邏輯關(guān)系,避免了業(yè)務(wù)與IT在最終交付物認(rèn)識(shí)上的差異。以下是PACS在需求分析過(guò)程中的原型與最終系統(tǒng)截圖對(duì)比:
Silverlight在PACS開(kāi)發(fā)中帶來(lái)了開(kāi)發(fā)過(guò)程的革命,經(jīng)過(guò)最終評(píng)估,采用快速原型的方式大大減少了需求變更,確保了業(yè)務(wù)滿(mǎn)意度。
展望未來(lái)
展望Silverlight技術(shù)未來(lái)發(fā)展,在剛剛結(jié)束MIX10大會(huì)上,微軟已經(jīng)將Silverlight定位為未來(lái)Windows Mobile的主要開(kāi)發(fā)技術(shù),加之以前在跨瀏覽器,跨平臺(tái)的策略,實(shí)際上已經(jīng)實(shí)現(xiàn)"手機(jī)、PC、電視"三屏合一,可以很清晰地看到微軟有使用Silverlight實(shí)現(xiàn)客戶(hù)端應(yīng)用大統(tǒng)一,從而全面收復(fù)Web應(yīng)用失地的趨勢(shì)。因此,未來(lái)微軟肯定還會(huì)不斷加大此項(xiàng)技術(shù)的認(rèn)知度,而Adobe公司不會(huì)放棄通過(guò)占有率全面反擊的機(jī)會(huì)。這也是我們作為企業(yè)開(kāi)發(fā)者希望看到的競(jìng)爭(zhēng)態(tài)勢(shì),那么RIA在經(jīng)歷7年之癢后,春天是否真的要來(lái)了,我們拭目以待!
NET技術(shù):案例分析:Silverlight在中國(guó)人壽的應(yīng)用,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。