亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于開(kāi)源瀏覽器技術(shù)的客戶端平臺(tái)設(shè)計(jì)

        2012-01-23 09:07:04宗蓮松
        關(guān)鍵詞:窗體腳本瀏覽器

        宗蓮松

        (西華大學(xué) 教務(wù)處,成都 610039)

        應(yīng)用軟件的設(shè)計(jì)方法通常被劃分為B/S(瀏覽器/服務(wù)器)與C/S(客戶端/服務(wù)器)2種,其主要的區(qū)別在于是否通過(guò)Web頁(yè)面來(lái)實(shí)現(xiàn)應(yīng)用與用戶的交互。某個(gè)應(yīng)用應(yīng)該采用哪一種方式進(jìn)行開(kāi)發(fā)主要取決于這2種方法的各自優(yōu)勢(shì),通??梢酝ㄟ^(guò)評(píng)估其實(shí)現(xiàn)軟件3層結(jié)構(gòu)(表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層)中每一層的可行性和代價(jià)來(lái)決定。此外Web與C/S客戶端還具有許多細(xì)節(jié)上的差異,例如在網(wǎng)絡(luò)通信方面Web能夠通過(guò)標(biāo)準(zhǔn)的HTTP/HTTPS接口大大降低數(shù)據(jù)傳輸?shù)拈_(kāi)發(fā)成本,而傳統(tǒng)客戶端則在即時(shí)通信和流媒體等領(lǐng)域扮演著重要角色。

        網(wǎng)頁(yè)瀏覽器是一個(gè)非常復(fù)雜的客戶端軟件,它在傳統(tǒng)客戶端軟件的基礎(chǔ)上通過(guò)支持Web標(biāo)準(zhǔn)完成對(duì)Web技術(shù)的支撐,成為B/S與C/S軟件開(kāi)發(fā)方式劃分的邊界。瀏覽器軟件屬于C/S軟件的范疇,因?yàn)橥ǔG闆r下它實(shí)現(xiàn)了Web技術(shù)所依賴的基礎(chǔ)卻并不應(yīng)用Web技術(shù)來(lái)實(shí)現(xiàn)附加功能,而如果突破這一限制將能夠充分利用B/S與C/S的優(yōu)勢(shì)打造可以快速開(kāi)發(fā)復(fù)雜應(yīng)用的軟件平臺(tái)。本文提出了一種將Web技術(shù)與傳統(tǒng)客戶端軟件相結(jié)合的新的軟件平臺(tái),以支撐各種不同的客戶端應(yīng)用。

        1 開(kāi)源瀏覽器技術(shù)在客戶端軟件中的應(yīng)用現(xiàn)狀

        Web技術(shù),特別是由于Web UI和JavaScript腳本在軟件開(kāi)發(fā)過(guò)程中的優(yōu)勢(shì),使其在PC與移動(dòng)客戶端的應(yīng)用越來(lái)越多,與應(yīng)用的整合也越來(lái)越深入。

        在PC客戶端應(yīng)用中,應(yīng)用Web技術(shù)的主要方式是嵌入Web控件,常見(jiàn)于RSS、電子郵件、Blog客戶端以及即時(shí)通信和Web開(kāi)發(fā)工具中。在Windows平臺(tái)上可以通過(guò)在應(yīng)用程序中嵌入IE控件來(lái)實(shí)現(xiàn);而Qt WebKit作為Qt開(kāi)源項(xiàng)目的一部分,更提供了跨平臺(tái)實(shí)現(xiàn)的能力[1]。控件的作用主要在于輔助界面展現(xiàn),而沒(méi)有充分利用JavaScript腳本的動(dòng)態(tài)語(yǔ)言特性來(lái)簡(jiǎn)化業(yè)務(wù)實(shí)現(xiàn)和提高開(kāi)發(fā)效率。

        基于FireFox瀏覽器的XUL則將Web技術(shù)而不是原生代碼作為客戶端業(yè)務(wù)邏輯的主體,通過(guò)XULRunner解析并運(yùn)行由XML、DOM、CSS、JavaScript所構(gòu)成的應(yīng)用,也能夠與原生代碼通過(guò)XPCOM對(duì)象機(jī)制進(jìn)行交互,一定程度上實(shí)現(xiàn)了簡(jiǎn)化客戶端應(yīng)用開(kāi)發(fā)的“平臺(tái)”能力[2-3]。但是XUL仍然具有其局限性,主要適用于UI事件驅(qū)動(dòng)的應(yīng)用。

        在移動(dòng)客戶端平臺(tái)上,PhoneGap能夠?yàn)锳ndroid、iOS等系統(tǒng)提供只使用JavaScript和HTML5/CSS3就能夠開(kāi)發(fā)移動(dòng)平臺(tái)桌面應(yīng)用的能力,同時(shí)提供訪問(wèn)移動(dòng)硬件平臺(tái)(如加速傳感器和攝像頭)的接口。

        相比傳統(tǒng)的整合方式,Web操作系統(tǒng)(如Chrome OS)建立在平臺(tái)思想上,盡管脫離了當(dāng)前意義上的客戶端軟件范疇,卻提供了更為理想的客戶端軟件開(kāi)發(fā)和運(yùn)行環(huán)境,在功能完備的基礎(chǔ)上大大降低了開(kāi)發(fā)成本、提供更自然的用戶交互模式并增強(qiáng)了安全性等優(yōu)勢(shì)。

        2 腳本驅(qū)動(dòng)的客戶端軟件平臺(tái)及其應(yīng)用模型

        為了降低客戶端開(kāi)發(fā)成本,可以充分利用Web技術(shù)與JavaScript腳本的動(dòng)態(tài)語(yǔ)言優(yōu)勢(shì)構(gòu)建一個(gè)客戶端平臺(tái)運(yùn)行環(huán)境(而不是應(yīng)用本身),通過(guò)它來(lái)加載和運(yùn)行實(shí)際的客戶端業(yè)務(wù)邏輯代碼,并為應(yīng)用提供基礎(chǔ)的開(kāi)發(fā)接口和運(yùn)行環(huán)境,如圖1所示。

        圖1 新的客戶端平臺(tái)應(yīng)用模型

        在新的軟件平臺(tái)中,定義平臺(tái)的設(shè)計(jì)目標(biāo)和應(yīng)用規(guī)則如下(也是與前述Web技術(shù)在客戶端軟件中應(yīng)用模式的主要區(qū)別):1)客戶端平臺(tái)本身并不實(shí)現(xiàn)具體的功能特性和業(yè)務(wù)邏輯,只為應(yīng)用的實(shí)現(xiàn)提供幫助;2)應(yīng)用本身采用更接近于Web開(kāi)發(fā)的方式,盡可能減少原生代碼開(kāi)發(fā)以提高開(kāi)發(fā)效率;3)應(yīng)用可以在不編寫(xiě)原生代碼的條件下,以客戶端軟件的形式實(shí)現(xiàn)Web應(yīng)用的功能;4)每一個(gè)用戶界面都以一個(gè)Web頁(yè)面進(jìn)行展現(xiàn),必要時(shí)嵌入原生UI,而不是在客戶端界面中嵌入Web控件的傳統(tǒng)方案;5)能夠?qū)崿F(xiàn)與原生代碼的交互以使用操作系統(tǒng)平臺(tái)相關(guān)的能力。

        相對(duì)于原生代碼JavaScript腳本的特性更適合描述業(yè)務(wù)邏輯流程,原生代碼適合實(shí)現(xiàn)平臺(tái)相關(guān)特性和較大運(yùn)算量的算法細(xì)節(jié)。在新的客戶端軟件平臺(tái)中,通過(guò)用JavaScript腳本替代原生代碼作為業(yè)務(wù)邏輯入口,在保持清晰的業(yè)務(wù)邏輯的同時(shí)提高開(kāi)發(fā)效率[4]。

        新的平臺(tái)保留Web開(kāi)發(fā)中的所有關(guān)鍵開(kāi)發(fā)方法,包括HTML、CSS、DOM及JavaScript,能夠快速地將Web應(yīng)用移植到該客戶端軟件平臺(tái)中。這既能夠增加Web應(yīng)用的交互性,也能夠隨客戶端發(fā)布避免Web應(yīng)用為兼容不同瀏覽器的額外工作,同時(shí)可以借助原生代碼的支持實(shí)現(xiàn)Web應(yīng)用無(wú)法實(shí)現(xiàn)的功能。

        與瀏覽器運(yùn)行環(huán)境不同,客戶端軟件需要自主決定是否及何時(shí)顯示交互界面,業(yè)務(wù)邏輯的運(yùn)行需要能夠脫離可視化的網(wǎng)頁(yè)范圍。同時(shí),客戶端軟件的行為方式也需要脫離單個(gè)頁(yè)面框架的束縛,可以由多個(gè)窗體共同完成客戶端軟件功能并對(duì)每個(gè)窗體有比在瀏覽器中更強(qiáng)的控制能力(例如窗體的模態(tài)與非模態(tài))。因此,需要使JavaScript能夠脫離HTML單獨(dú)運(yùn)行,并增加能夠由JavaScript控制的窗體對(duì)象和多窗體的界面體系。為了簡(jiǎn)化界面框架的設(shè)計(jì),可以限定每個(gè)窗體僅由一個(gè)Web頁(yè)面來(lái)表現(xiàn)(這并不會(huì)影響UI的靈活性,因?yàn)槿匀豢梢栽陧?yè)面中使用內(nèi)嵌的界面元素)。

        客戶端軟件應(yīng)該不被局限只在網(wǎng)絡(luò)環(huán)境下運(yùn)行,但同時(shí)能夠讓HTML訪問(wèn)本地資源能夠像通過(guò)HTTP訪問(wèn)網(wǎng)絡(luò)資源一樣方便,這在Chromium的體系中可以通過(guò)實(shí)現(xiàn)新的URI Scheme來(lái)完成,將URI(統(tǒng)一資源標(biāo)識(shí)符)地址源映射到本地限定的HTML及其他資源,這樣做同時(shí)也增強(qiáng)了對(duì)本地資源的安全保護(hù),頁(yè)面并不能利用這個(gè)途徑無(wú)限制地訪問(wèn)任意資源。

        最核心的需求是為實(shí)現(xiàn)復(fù)雜多變的客戶端業(yè)務(wù)邏輯建立一套規(guī)則的開(kāi)發(fā)模型,包括降低JavaScript與原生代碼實(shí)現(xiàn)互相調(diào)用及傳遞參數(shù)與對(duì)象的成本、為事件觸發(fā)同步回調(diào)或異步通知的支持以及實(shí)現(xiàn)靈活的線程模型。

        以展現(xiàn)一個(gè)客戶端即時(shí)通信工具的登錄界面為例,希望主體的工作流程能夠在平臺(tái)基礎(chǔ)上用JavaScript代碼控制:

        在這個(gè)示例中,客戶端平臺(tái)首先加載一段 JavaScript腳本并運(yùn)行,平臺(tái)中內(nèi)嵌了 JavaScript對(duì)象“Modules”,并允許腳本代碼通過(guò)它加載其他通過(guò)原生代碼或腳本所擴(kuò)展的JavaScript對(duì)象“ui”并調(diào)用相應(yīng)的方法ShowModalUI顯示一個(gè)Web界面,參數(shù)指定訪問(wèn)經(jīng)過(guò)URI Scheme映射的本地資源login/login.html。UI框架經(jīng)過(guò)擴(kuò)展后,login.html能夠在頁(yè)面中嵌入其他JavaScript腳本控制新窗體的位置、大小及風(fēng)格。

        通過(guò)對(duì)客戶端應(yīng)用需求的分析,可以對(duì)用例描述采用動(dòng)名結(jié)構(gòu)的方式分離出所涉及的主要對(duì)象:WebUI、JavaScript業(yè)務(wù)邏輯、原生代碼所對(duì)應(yīng)的JavaScript接口、URI Scheme以及客戶端平臺(tái)預(yù)先內(nèi)嵌的JavaScript對(duì)象。客戶端平臺(tái)的職責(zé)則是需要完成對(duì)其中每一類(lèi)對(duì)象及對(duì)象間關(guān)系的管理。

        3 框架設(shè)計(jì)與實(shí)現(xiàn)

        圖2 基于Chromium的客戶端軟件平臺(tái)結(jié)構(gòu)示意圖

        通過(guò)分析客戶端平臺(tái)的應(yīng)用模型,構(gòu)建平臺(tái)需要實(shí)現(xiàn)的要素包括:1)脫離頁(yè)面環(huán)境加載并運(yùn)行JavaScript腳本;2)為腳本環(huán)境內(nèi)置必需的JavaScript對(duì)象;3)能夠?qū)⒃a封裝為JavaScript對(duì)象或接口供 JavaScript腳本調(diào)用[5];4)提供原生代碼到JavaScript的回調(diào)或事件通知的途徑[6];5)實(shí)現(xiàn)訪問(wèn)本地資源的URI Scheme;6)以擴(kuò)展JavaScript對(duì)象的方式提供Web UI窗體支持。

        Chromium是基于WebKit內(nèi)核的Chrome瀏覽器的開(kāi)放源代碼項(xiàng)目名稱(chēng),其發(fā)布版本被分為Chromium Dev開(kāi)發(fā)版本和官方Chrome瀏覽器版本。WebKit由網(wǎng)頁(yè)渲染引擎WebCore和JavaScript腳本引擎JavaScriptCore構(gòu)成。Chromium基于WebKit之上進(jìn)行擴(kuò)展,具備許多優(yōu)點(diǎn):跨平臺(tái)、多進(jìn)程架構(gòu)、利用高效的V8 JavaScript引擎替換JavaScriptCore、實(shí)現(xiàn)了NPAPI插件體系、GPU加速、很好地支持HTML5標(biāo)準(zhǔn)等等。

        在Chromium內(nèi)部包含了構(gòu)建客戶端平臺(tái)的基礎(chǔ)技術(shù),例如JavaScript腳本與原生代碼的交互,對(duì)其進(jìn)行適當(dāng)?shù)母脑炷軌蚍项A(yù)期,下面將基于Chromium的框架進(jìn)一步闡述新的客戶端軟件平臺(tái)的設(shè)計(jì)重點(diǎn)。在新的平臺(tái)設(shè)計(jì)中,能夠依賴于Chromium框架的主要內(nèi)容在于使用WebKit展現(xiàn)可視化界面、通過(guò)JavaScript腳本引擎實(shí)現(xiàn)腳本與原生代碼的交互、以及為本地資源定義URI路徑以實(shí)現(xiàn)脫離對(duì)網(wǎng)絡(luò)環(huán)境的依賴,平臺(tái)與開(kāi)源Chromium的關(guān)系如圖2所示。

        由于Chromium中使用V8替代WebKit自帶的JSCore作為JavaScript腳本引擎,因此大多數(shù)需要在JavaScript與原生代碼之間進(jìn)行的交互的接口可以通過(guò)V8所提供的能力來(lái)實(shí)現(xiàn)。V8通過(guò)腳本運(yùn)行環(huán)境上下文來(lái)控制JavaScript對(duì)象在腳本中是否能夠被訪問(wèn),每個(gè)頁(yè)面都有相應(yīng)的腳本環(huán)境,也可以顯式的構(gòu)造一個(gè)上下文使JavaScript脫離頁(yè)面運(yùn)行[7]。下面是利用V8腳本引擎執(zhí)行JavaScript腳本的代碼片斷:

        V8使用一種通過(guò)將JavaScript腳本注入到在腳本環(huán)境中的特殊方式來(lái)注冊(cè)腳本對(duì)象與接口,V8引擎在腳本的語(yǔ)法解析過(guò)程中如果遇到native function的聲明將會(huì)通過(guò)相應(yīng)的接口根據(jù)所提供的函數(shù)名稱(chēng)查詢對(duì)應(yīng)的原生代碼是否存在。以下代碼片斷用于在特定的JavaScript運(yùn)行環(huán)境上下文中內(nèi)置Modules對(duì)象并將Modules.Load方法與原生代碼通過(guò)名稱(chēng)LoadModule進(jìn)行關(guān)聯(lián),如果查找到對(duì)應(yīng)的原生代碼接口會(huì)在調(diào)用時(shí)將JavaScript參數(shù)以其C++的封裝形式傳遞給原生代碼:

        對(duì)本地資源的URI定義可以通過(guò)Chromium中的URLRequest::RegisterProtocolFactory接口來(lái)實(shí)現(xiàn),在頁(yè)面請(qǐng)求一個(gè)指定的URI時(shí),Chromium通過(guò)已注冊(cè)的URI協(xié)議規(guī)則生成對(duì)應(yīng)的URLRequestJob,因此能夠在所注冊(cè)的ProtocolFactory中生成自定義的URLRequestJob以控制對(duì)資源的訪問(wèn)。由于瀏覽器基于同源策略控制Web資源訪問(wèn)的安全性,在實(shí)現(xiàn)URI Scheme注冊(cè)后還需要將對(duì)應(yīng)的URI訪問(wèn)添加到SecurityOrigin的白名單中。

        因?yàn)镃hromium對(duì)HTML5提供良好的支持,HTML5標(biāo)準(zhǔn)中有關(guān)WebWorker的定義能夠幫助我們簡(jiǎn)化在JavaScript腳本中對(duì)應(yīng)用程序線程模型的控制,關(guān)于自定義事件的定義則能夠通過(guò)在JavaScript中調(diào)用addEventListener來(lái)簡(jiǎn)化對(duì)原生代碼與腳本間的異步事件通知機(jī)制的設(shè)計(jì)。

        4 結(jié)語(yǔ)

        Web技術(shù)伴隨互聯(lián)網(wǎng)應(yīng)用的普及得到了廣泛應(yīng)用和快速發(fā)展,新的Web標(biāo)準(zhǔn)增強(qiáng)了網(wǎng)頁(yè)的視覺(jué)表現(xiàn)能力和業(yè)務(wù)處理能力。Web技術(shù)正在逐步實(shí)現(xiàn)以前只能由客戶端代碼才能完成的任務(wù),同時(shí)客戶端開(kāi)發(fā)工具也越來(lái)越多地將網(wǎng)頁(yè)相關(guān)的技術(shù)結(jié)合起來(lái)以提升開(kāi)發(fā)效率和用戶體驗(yàn),人們?cè)絹?lái)越多地認(rèn)識(shí)到兩者的優(yōu)勢(shì)并加以應(yīng)用。和其他開(kāi)源項(xiàng)目一樣,瀏覽器的開(kāi)源項(xiàng)目能夠?yàn)槿藗冊(cè)谲浖O(shè)計(jì)方法和實(shí)踐中提供很多有價(jià)值的參考,利用瀏覽器作為B/S與C/S開(kāi)發(fā)邊界的角色,深入挖掘?yàn)g覽器技術(shù)對(duì)于合理利用Web與傳統(tǒng)技術(shù)優(yōu)勢(shì)、理解Web操作系統(tǒng)的設(shè)計(jì)目標(biāo)等有著一定的參考作用。

        [1]宋杰,曹竹冬.基于Qt/Embedded的Web瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2010(10):136-138.

        [2]吳谷,章炯民.基于XUL開(kāi)發(fā)富客戶端應(yīng)用程序[J].電腦知識(shí)與技術(shù),2006(1):135-137.

        [3]戚艷軍,李繼玲.圖形界面開(kāi)發(fā)語(yǔ)言XUL應(yīng)用研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007(3):233-235.

        [4]劉春梅,孫鵬,胡琳琳.基于JavaScript引擎的終端動(dòng)態(tài)數(shù)據(jù)處理方法[J].微計(jì)算機(jī)應(yīng)用,2010,31(4):25-30.

        [5]蔣章概,陳榕.基于CAR構(gòu)件的WebKit本地?cái)U(kuò)展策略[J].計(jì)算機(jī)應(yīng)用,2009(12):195-197.

        [6]宋國(guó)瑞,何宗鍵.基于Windows CE平臺(tái)的Widget引擎中JavaScript解析器和JSBinding研究[J].軟件導(dǎo)刊,2010(12):12-14.

        [7]岳坐剛,張凱兵.基于WEB服務(wù)的框架結(jié)構(gòu)分析[J].西華大學(xué)學(xué)報(bào):自然科學(xué)版,2004(S1):13-15.

        猜你喜歡
        窗體腳本瀏覽器
        酒駕
        安奇奇與小cool 龍(第二回)
        反瀏覽器指紋追蹤
        電子制作(2019年10期)2019-06-17 11:45:14
        試談Access 2007數(shù)據(jù)庫(kù)在林業(yè)檔案管理中的應(yīng)用
        檔案天地(2019年5期)2019-06-12 05:12:02
        數(shù)據(jù)庫(kù)系統(tǒng)shell腳本應(yīng)用
        快樂(lè)假期
        環(huán)球?yàn)g覽器
        再見(jiàn),那些年我們嘲笑過(guò)的IE瀏覽器
        基于LayeredWindow的異形窗體局部刷新
        中文信息(2014年2期)2014-03-06 23:49:14
        巧設(shè)WPS窗體控件讓表格填寫(xiě)更規(guī)范
        免费成人福利视频| 久久久久久久妓女精品免费影院 | 无码中文字幕日韩专区| 国产三级不卡在线观看视频| 仙女白丝jk小脚夹得我好爽| 长腿校花无力呻吟娇喘的视频| 国产va免费精品观看精品| 白白色发布在线观看视频| 免费国产在线精品三区| 国产精品亚洲欧美天海翼| 毛片内射久久久一区| 美女扒开屁股让男人桶| 成人大片免费在线观看视频| 男女发生关系视频网站| 无码中文日韩Av| 国产乱人伦av在线无码| 国产产区一二三产区区别在线| 蜜桃91精品一区二区三区| 日本一区二区日韩在线| 99综合精品久久| 欧美三级一区| 免费无码黄动漫在线观看| 精品人妻av区乱码| 日本久久精品中文字幕| 偷拍一区二区三区黄片| 人妻中文字幕av有码在线| 国产精品亚洲A∨天堂不卡| 亚洲av无码之日韩精品| av无码精品一区二区三区宅噜噜| 色偷偷偷在线视频播放| 人妻制服丝袜中文字幕| 色婷婷亚洲精品综合影院| 久久九九av久精品日产一区免费| 99久久精品国产自在首页| 最新精品亚洲成a人在线观看| 国产精自产拍久久久久久蜜| 大又大粗又爽又黄少妇毛片| 午夜天堂精品久久久久| 精品人妻伦一二三区久久| 日本黑人乱偷人妻在线播放| 亚洲中文字幕视频第一二区|