国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

從用戶體驗(yàn)與編程模型方面看AJAX與B/S

2019-11-17 05:52:59
字體:
供稿:網(wǎng)友

1 B/S為何難于提供好的用戶交互體驗(yàn)?

這里頭的最大問題有幾個(gè):


(1)無狀態(tài)的HTTP協(xié)議

Windows窗體間可以通過內(nèi)存直接交換信息,但作為B/S架構(gòu)通訊基礎(chǔ)協(xié)議的HTTP是無狀態(tài)的。


如果將瀏覽器看成是客人,Web Server看成是旅館,在HTTP協(xié)議的管理之下,會(huì)出現(xiàn)這種情況:不管某客人來訪多少次,Web Server都將其視為第一次的訪客。這樣一來,客人每次都得帶齊身份證件供旅館工作人員“驗(yàn)明正身”。


HTTP協(xié)議的無狀態(tài),導(dǎo)致Web Server的“六親不認(rèn)”,這固然能增加Web Server的吞吐量,卻給應(yīng)用系統(tǒng)的開發(fā)帶來了麻煩。因?yàn)閼?yīng)用系統(tǒng)中往往有許多業(yè)務(wù)處理流程,天生就是信息流轉(zhuǎn)的,即原始數(shù)據(jù)從一端進(jìn)去,從另一端出來時(shí)應(yīng)該已經(jīng)過某些處理,怎可想象整個(gè)業(yè)務(wù)流程中的信息會(huì)流失?于是,在HTTP各請(qǐng)求間共享信息就成了件麻煩事,這就是HTTP請(qǐng)求的“狀態(tài)保持”問題。每個(gè)B/S系統(tǒng)都必須解決這個(gè)問題。微軟想了一些“歪招”,比如充分利用HTML網(wǎng)頁的中隱藏域,再在Web Server上做些手腳,于是asp.net擁有了一套在各個(gè)HTTP請(qǐng)求之間維持狀態(tài)的技術(shù):session,Cookie,ViewState,PRofile,application。


然而問題并沒有完全解決。比如,C/S系統(tǒng)中常見的收集用戶輸入信息的對(duì)話框,主窗體與對(duì)話框之間有著信息的交換(又分為兩種:模式的和非模式的,前者對(duì)話框不關(guān)掉,主窗體不能被激活),在B/S架構(gòu)之下,由于瀏覽器的每個(gè)請(qǐng)求是獨(dú)立的,要在兩個(gè)獨(dú)立的瀏覽器窗口間實(shí)現(xiàn)類似于模式對(duì)話框這種直接的信息交換,我還真不知道該怎樣干。


Ajax使用以下這種的方法來“摸擬”出模式窗體:將主窗體與對(duì)話框“合二為一”,對(duì)話框在HTML中就是一個(gè)div元素,平時(shí)是隱藏的,需要時(shí)再顯示它。微軟的AJAX Control Toolkit中甚至為這一功能設(shè)計(jì)了一個(gè)控件。諸如此類的小伎倆,在B/S開發(fā)中不勝枚舉。


可以看到,許多在C/S輕而易舉就可實(shí)現(xiàn)的功能,在B/S中要實(shí)現(xiàn)則大費(fèi)周章。


(2) 特殊的運(yùn)行環(huán)境——瀏覽器


B/S系統(tǒng)的前端運(yùn)行環(huán)境是瀏覽器,這就帶來了諸多的限制,不能干許多事,比如直接訪問硬件(例如打印機(jī)),也無法充分利用硬件的資源。例如,現(xiàn)在的新電腦都是雙核的,你能直接用javaScript加HTML寫出一個(gè)多線程程序以充分利用這兩顆“奔騰的芯”?


而C/S系統(tǒng)則直接運(yùn)行在OS(操作系統(tǒng))之上,可以調(diào)用OS提供的所有功能,這種限制就不存在了。


(3)尷尬的Web客戶端編程語言——Javascript

傳統(tǒng)的C/S程序,可以使用為數(shù)眾多的各種開發(fā)語言,尤其是象C++,Java,C#之類主流面向?qū)ο笳Z言,功能強(qiáng)大,使用方便,各種開發(fā)工具齊備,已非常成熟。


與此相反,B/S前端所使用最多的編程語言JavaScript,不僅不讓人喜歡,甚至讓許多程序員“恨之入骨”,將“用JavaScript編程”看成是件苦差事。


讓我們來看看JavaScript的兩大硬傷。


首先,缺乏清晰而統(tǒng)一的編程模型。


JavaScript雖然名字中有一個(gè)Java,并采用了類似的語法,但與真正的Java并無關(guān)系。唉,她本身是一只丑小鴨,總想著攀上天鵝這門親,卻沒想到別人并不買賬。


JavaScript用到了許多對(duì)象,但說它是面向?qū)ο蟮陌桑謱?shí)在難以令人信服(面向?qū)ο缶幊痰幕締卧穷悾?,比如它沒有類似于C#等主流面向?qū)ο笳Z言的關(guān)鍵字class,到處是一個(gè)個(gè)的函數(shù),這就使所有的代碼難于以類的方式清晰界定;同時(shí),它又不是結(jié)構(gòu)化的(結(jié)構(gòu)化編程的基本單元是函數(shù)),因?yàn)闉g覽器在解析HTML文檔時(shí),是采用流式解讀方式,從而導(dǎo)致一些JavaScript代碼被放在函數(shù)之外,在解析HTML文檔時(shí)直接執(zhí)行,而另一部分放到函數(shù)中的代碼,則多采用事件驅(qū)動(dòng)的方式運(yùn)行,這就帶來了復(fù)雜的程序執(zhí)行流程,遠(yuǎn)不如純結(jié)構(gòu)化編程中統(tǒng)一采用函數(shù)調(diào)用的編程方式簡(jiǎn)潔。


這樣看來,JavaScript兼具面向?qū)ο螅Y(jié)構(gòu)化,非結(jié)構(gòu)化三種編程方式的特點(diǎn),但卻弄得不倫不類,沒有一個(gè)清晰而統(tǒng)一的編程模型,難于寫出結(jié)構(gòu)清晰易于維護(hù)的代碼,反而帶來了許多混亂。


其次,JavaScript的另一硬傷是它的瀏覽器運(yùn)行環(huán)境。


由于歷史的原因,不同的瀏覽器,甚至同一瀏覽器的不同版本,其編程模型都有或多或少的差別,因而不得不寫代碼檢測(cè)瀏覽器類型,比如需要為IE寫一套代碼,又為Firefox寫另一套。這實(shí)在是一件麻煩事。


上述這些問題,幾乎是B/S架構(gòu)系統(tǒng)“與生俱來”的“缺陷”。先天不足后天補(bǔ),人們想出了許多招數(shù)來解決這些問題。AJAX是眾人看好的希望之星。


2 希望之星——AJAX

這些天來,我系統(tǒng)地了解了一下微軟的AJAX框架。發(fā)現(xiàn)這一框架的復(fù)雜遠(yuǎn)遠(yuǎn)超過我原先的估計(jì),微軟設(shè)計(jì)AJAX框架的工程師們,將各項(xiàng)Web開發(fā)技術(shù)的潛力發(fā)掘得很深,在很大程度上彌補(bǔ)了前面提出的問題。


(1)對(duì)JavaScript語言的擴(kuò)充:

微軟通過提供封裝好的AJAX Library,增強(qiáng)了JavaScript的面向?qū)ο筇匦裕梢苑奖銓?shí)現(xiàn)繼承,定義接口,序列化對(duì)象,引發(fā)事件,反射類型等功能,雖然比真正的面向?qū)ο笳Z言(比如Java/C#)還有差距,但能將“丑陋”的JavaScript打扮得可以見人,也算是功力不凡。


(2)大幅度提升瀏覽器端代碼的功能

在AJAX Library支持之下,配合增強(qiáng)功能的JavaScript,在瀏覽器本身的支持之下,可以在瀏覽器中寫JavaScript腳本,方便地向服務(wù)器發(fā)出異步請(qǐng)求,實(shí)現(xiàn)頁面局部刷新,并可以直接調(diào)用Web Service。


(3)引入基于組件的開發(fā)(CBD)方式

基于組件的開發(fā)(CBD)早已是面向?qū)ο笙到y(tǒng)的主流開發(fā)方式,雖然現(xiàn)在SOA(基于服務(wù)的架構(gòu))炒作得熱鬧非凡,但要達(dá)到CBD那樣的成熟程度,還需要時(shí)間。


對(duì)于JavaScript而言,別說SOA,能實(shí)現(xiàn)CBD都很困難。


為了實(shí)現(xiàn)CBD,微軟給JavaScript“大補(bǔ)特補(bǔ)”,增強(qiáng)了許多特性,基于Microsoft AJAX Library,程序員可以開發(fā)三種類型的可復(fù)用組件:None_Visual Component(不可視的組件,相當(dāng)于面向?qū)ο笙到y(tǒng)中的一些提供公用功能的類)、Behavior(行為,擴(kuò)充現(xiàn)有Web控件的功能)、Control(擁有可視化界面元素的Web控件)。


尤其是AJAX Control ToolKit中提供的幾十個(gè)控件,基本上實(shí)現(xiàn)了B/S對(duì)C/S用戶界面大部分特性的摸擬,是這一新編程模型應(yīng)用的典范。


微軟對(duì)JavaScript編程模型的增強(qiáng),使軟件工程師終于可以用CBD的開發(fā)方式開發(fā)Web客戶端代碼。我認(rèn)為,這是一個(gè)進(jìn)步。


(4)增強(qiáng)的服務(wù)器端能力

為了增強(qiáng)瀏覽器端代碼的能力,必須通過服務(wù)器端予以配合。AJAX本身就基于Browser與Web Server相互支持的編程模型(Web Server提供數(shù)據(jù)服務(wù),Browser提供xmlHttpRequest對(duì)象可向Web Server發(fā)出異步請(qǐng)求,當(dāng)數(shù)據(jù)回來時(shí),程序員可以用JavaScript編寫代碼實(shí)現(xiàn)對(duì)網(wǎng)頁的動(dòng)態(tài)局部更新)。


通過AJAX Extension,微軟增強(qiáng)了服務(wù)器端ASP.NET框架的功能。并將常用的功能外化為簡(jiǎn)單的Web控件,比如AJAX的核心控件ScriptManager,用于定義頁面可更新區(qū)域的UpdatePanel,還有用于增強(qiáng)現(xiàn)有ASP.NET控件的位于AJAX Control Toolkit中的幾十個(gè)Extender控件(即附加到現(xiàn)有控件上的控件,其目的是給現(xiàn)有控件擴(kuò)充新的功能)。


擁有了這些控件,開發(fā)Web前端程序就類似于在VB中設(shè)計(jì)窗體了。現(xiàn)在不僅僅是可以繪出類似于Windows窗體的界面,而且通過利用AJAX的異步請(qǐng)求與頁面的局部刷新技術(shù),在Web服務(wù)器的配合之下,可以在用戶體驗(yàn)上逼進(jìn)Windows窗體。


不管多少人如何看不起VB,但VB所帶來的可視化編程普及浪潮,的確影響深遠(yuǎn),微軟推動(dòng)JavaScript編程走向這一步,也是大勢(shì)所趨。為了提高Web 開發(fā)的效率,必須走這一步。


然而,需要指出的是,不管后天如何“進(jìn)補(bǔ)”,畢竟“先天不足”,B/S架構(gòu)要在用戶體驗(yàn)這點(diǎn)上超過C/S,還是非常困難。


3 未來:B/S與C/S,誰主沉浮

由于管理與部署的簡(jiǎn)便性,B/S架構(gòu)成為當(dāng)今許多信息系統(tǒng)的首選,然而,用戶是追求好的使用體驗(yàn)的,大體總結(jié)起來,有以下要求:


(1)漂亮的界面。這點(diǎn)B/S有優(yōu)勢(shì)。


(2)方便的輸入。比如許多用戶都希望能不用鼠標(biāo)就可以錄入數(shù)據(jù),或者是通過簡(jiǎn)單的點(diǎn)擊實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)填充,在B/S架構(gòu)下實(shí)現(xiàn)起來比較麻煩,AJAX可以在一定程度上解決這個(gè)問題。


(3)閃電般的速度。對(duì)于C/S而言,要實(shí)現(xiàn)響應(yīng)速度快,有許多的法子可想,可B/S就不容易了。由于受到瀏覽器的限制,客戶端強(qiáng)大的硬件資源幾乎是被閑置的。另外,網(wǎng)絡(luò)速度是B/S架構(gòu)的瓶頸,除非帶寬能有快速的增長,否則,WWW就是World Wide Wait。


C/S雖然擁有好的用戶體驗(yàn),但它的問題在于開發(fā)跨越整個(gè)互聯(lián)網(wǎng)的分布式系統(tǒng)困難,而且由于需要安裝客戶端,系統(tǒng)更新與組件版本管理就成了一個(gè)大問題,此外,不象B/S架構(gòu)中只需考慮服務(wù)器端的問題,在C/S架構(gòu)由于多用戶同時(shí)訪問服務(wù)器,各組件間的調(diào)用和依賴關(guān)系復(fù)雜,在處理多線程訪問共享資源,事務(wù)處理等方面必須同時(shí)考慮客戶端與服務(wù)器端,吞吐量受到大的限制。因此,C/S多建構(gòu)于局域網(wǎng)內(nèi),供企業(yè)內(nèi)部使用。


目前基本上是B/S與C/S共存,隨著諸如AJAX之類B/S技術(shù)的廣泛應(yīng)用,B/S不斷攻城掠地,占有上風(fēng),但不可能將C/S徹底地“打垮”。


比較有意思的是:象微軟這樣的大公司,是如何看待B/S與C/S發(fā)展前途的?


我等普通開發(fā)者,沒有機(jī)會(huì)直接與微軟高層對(duì)話,但可以從其公司的產(chǎn)品發(fā)展路線看出一些端倪:


微軟似乎并未認(rèn)為B/S代表著未來的技術(shù)發(fā)展方向,相反,它的許多行動(dòng),都向著拋棄瀏覽器的方向在走。


首先,微軟簡(jiǎn)化了C/S的開發(fā)與部署問題,推出了Smart Client技術(shù),讓C/S客戶端程序的更新可以無需人工干預(yù),自動(dòng)進(jìn)行。


其次,微軟努力彌補(bǔ)B/S與C/S兩者間的鴻溝,在設(shè)計(jì)ASP.NET時(shí),毅然拋棄已取得不錯(cuò)業(yè)績(jī)的ASP,直接采用類似于VB的“可視化控件+事件驅(qū)動(dòng)” 編程方式,甚至將Web 頁面也稱為“Form”——Web Form。


第三,微軟可能認(rèn)為AJAX是一種過渡性質(zhì)的技術(shù)。


微軟在AJAX上遲遲不見動(dòng)作,直到看到由于Google等公司成功應(yīng)用AJAX技術(shù)提升Web用戶體驗(yàn)而導(dǎo)致AJAX的迅速竄紅時(shí),才行動(dòng)起來,給ASP.NET加上AJAX擴(kuò)展,整個(gè)過程中顯然行動(dòng)并不積極,投入的資源也并不多,這與當(dāng)年微軟與網(wǎng)景公司展開瀏覽器大戰(zhàn)時(shí)完全不一樣。但從其在VS2008中將AJAX Extension內(nèi)置為標(biāo)準(zhǔn)配置,并直接集成JavaScript的調(diào)試功能到IDE中,說明微軟還是面對(duì)現(xiàn)實(shí)的,它承認(rèn)AJAX擁有重要的地位與較大的發(fā)展?jié)摿Α?


其實(shí),我分析微軟的野心是“一統(tǒng)天下”,拋棄瀏覽器,徹底統(tǒng)一B/S與C/S。


這點(diǎn)在.NET 3.0/3.5中看得很清楚。


首先,微軟用WCF統(tǒng)一了DCOM,.NET Remoting等主要用于C/S的技術(shù),集成了原先位于COM+中的許多企業(yè)化開發(fā)特性,連同主要用于B/S架構(gòu)的Web Service技術(shù),統(tǒng)一地抽象并封裝為可復(fù)用的WCF Service。很明顯,微軟要將信息系統(tǒng)開發(fā)模式由CBD轉(zhuǎn)為SOA(即未來的系統(tǒng)是組裝Service,而非組裝Component)。


其次,微軟拋棄了非常成熟的Window桌面程序編程模型(Win32 API+消息/事件驅(qū)動(dòng))引入了一個(gè)全新的WPF編程框架,其中的一個(gè)重大的革新是符合XML規(guī)范的XAML(應(yīng)用程序標(biāo)記語言)的出現(xiàn)。XAML用XML格式純文本文件來描述應(yīng)用程序界面。


我們可以很容易地將XAML與XHTML進(jìn)行類比。瀏覽器解析XHTML代碼,生成可視化的網(wǎng)頁界面,而XAML則由.NET Framework 虛擬機(jī)負(fù)責(zé)解析,在Vista中,由于Vista直接集成.NET Framework 3.0,就可以將Vista看成是一個(gè)超級(jí)瀏覽器,由它負(fù)責(zé)讀入XAML生成用戶界面,并實(shí)現(xiàn)其所有應(yīng)用程序功能。


這樣一來,一種新的編程模型浮出水面,不管是B/S還是C/S的系統(tǒng),其方式都是統(tǒng)一的:讀入XAML代碼à解析à呈現(xiàn)à接收用戶輸入à處理數(shù)據(jù)à顯示結(jié)果。


在這個(gè)編程模型中,瀏覽器成了一個(gè)旁觀者,不再是客戶端應(yīng)用的核心。


新編程模型的運(yùn)行平臺(tái)是全功能的OS,而非功能受限的瀏覽器。這個(gè)區(qū)別是巨大的,一個(gè)運(yùn)行于OS之上的瀏覽器,其功能怎能和OS自身相比!


現(xiàn)在可以通過按面向?qū)ο蠓绞浇M織起來的操作系統(tǒng)API(應(yīng)用程序編程接口)方便地調(diào)用操作系統(tǒng)的各種功能,充分利用客戶端的硬件資源(比如可以很容易地在.NET Framework之上開發(fā)多線程程序,“壓榨”雙核CPU的工作能力)。用戶界面都用XAML來描述,這就統(tǒng)一了B/S與C/S的界面層技術(shù)。


WPF最適合的運(yùn)行環(huán)境是Vista操作系統(tǒng),它的一個(gè)功能子集,現(xiàn)在稱為Silverlight,被實(shí)現(xiàn)為一個(gè)瀏覽器插件,從而讓W(xué)PF程序也能跑在傳統(tǒng)的瀏覽器中。由于Silverlight和Vista本身都可以解析XAML,所以,現(xiàn)在可以用XAML只寫一套界面代碼,就同時(shí)適用于B/S與C/S,并獲得相同的用戶體驗(yàn)。


由于B/S和AJAX存在著一些先天不足,如果將經(jīng)過AJAX增強(qiáng)功能的B/S系統(tǒng)比喻為一個(gè)舞者,那么,這其實(shí)是一位帶著鐐銬跳舞的舞者,而微軟公司的想法是,與其不斷想法減輕這一鐐銬的重量,為何不干脆直接拋棄這一鐐銬呢?


微軟推出WPF與WCF,就是這樣的一個(gè)嘗試。


應(yīng)該來說,微軟公司的這套發(fā)展戰(zhàn)略是建立在對(duì)現(xiàn)有B/S與C/S各自的優(yōu)缺點(diǎn)分析的基礎(chǔ)之上而制訂的,有它的科學(xué)性,也考慮到了自身的商業(yè)利益。但這一戰(zhàn)略最終實(shí)現(xiàn)還有許多困難,因?yàn)榧词箯?qiáng)大如微軟,也無法一統(tǒng)江湖。微軟的對(duì)手與微軟一樣聰明,技術(shù)進(jìn)步同樣迅速。


可以斷言,由于信息系統(tǒng)應(yīng)用的延續(xù)性,在相當(dāng)長的一段時(shí)間內(nèi)(也許有三五年,也可能有五到十年),B/S與C/S將同時(shí)并存,由于B/S許多突出的優(yōu)良特性,在與C/S的競(jìng)爭(zhēng)中將占上風(fēng),這個(gè)局面不會(huì)有大的改變。對(duì)于AJAX,作為B/S系統(tǒng)的一個(gè)重量級(jí)武器,雖然很有效,但存在不少缺陷,我對(duì)于它的未來發(fā)展,抱有謹(jǐn)慎的樂觀態(tài)度,不過,作為一名Web 開發(fā)者,應(yīng)該去了解并應(yīng)用這一技術(shù)。


未來的格局到底如何,某種技術(shù)到底有沒有前途,都不是由個(gè)人說了算的。我想,B/S與C/S之爭(zhēng)最終的格局,將是多方面因素共同博弈的結(jié)果。對(duì)于個(gè)人而言,必須與時(shí)俱進(jìn),及時(shí)調(diào)整自己的行動(dòng)和戰(zhàn)略,這是當(dāng)代軟件開發(fā)者的宿命。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 保山市| 龙泉市| 江城| 扎囊县| 金平| 武功县| 股票| 安吉县| 辉县市| 宝山区| 南漳县| 信阳市| 都匀市| 绥宁县| 黎城县| 江山市| 浦县| 吴江市| 平遥县| 嘉善县| 中超| 镇宁| 三明市| 卢氏县| 鹰潭市| 福清市| 集安市| 婺源县| 兴宁市| 青阳县| 南川市| 错那县| 监利县| 疏勒县| 苍溪县| 梅河口市| 肥乡县| 建德市| 微博| 五台县| 三台县|