提高WebService數(shù)據(jù)傳輸效率的基本方法_第1頁(yè)
提高WebService數(shù)據(jù)傳輸效率的基本方法_第2頁(yè)
提高WebService數(shù)據(jù)傳輸效率的基本方法_第3頁(yè)
提高WebService數(shù)據(jù)傳輸效率的基本方法_第4頁(yè)
提高WebService數(shù)據(jù)傳輸效率的基本方法_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、提高 Web Service 數(shù)據(jù)傳輸效率的基本方法如何提高 Web Service 的數(shù)據(jù)傳輸效率及其應(yīng)用場(chǎng)景王 云 (cdlwangy), 軟件工程師, IBM 中國(guó)研發(fā)中心作者王云是 IBM DB2 for iSeries 項(xiàng)目組的軟件工程師,他對(duì) DB2, SOA 以及商務(wù)智能的解決方案有比較深入的理解。他的寫(xiě)作經(jīng)歷大多相關(guān)于商務(wù)智能以及 SOA 的解決方案。簡(jiǎn)介: 本文介紹了在 Web Service 實(shí)施和開(kāi)發(fā)過(guò)程中,提高系統(tǒng)效率的一些方法,實(shí)踐證明,這些方法都是非常有效且易于實(shí)現(xiàn)的。針對(duì)各種方法的優(yōu)缺點(diǎn)以及應(yīng)用場(chǎng)景,文章也進(jìn)行了相應(yīng)的討論。本文的標(biāo)簽:  we

2、bservice, 數(shù)據(jù)傳輸標(biāo)記本文!發(fā)布日期: 2007 年 11 月 15 日 級(jí)別: 中級(jí) 訪(fǎng)問(wèn)情況 4683 次瀏覽 建議: 1 (查看或添加評(píng)論) 平均分 (共 2 個(gè)評(píng)分 )背景Web Service 現(xiàn)如今已經(jīng)成為 SOA 實(shí)現(xiàn)標(biāo)準(zhǔn)之一。很多公司已經(jīng)或者正在參與到 Web Service 項(xiàng)目的實(shí)現(xiàn)和部署中。Web Service 的優(yōu)點(diǎn)在于松散的處理異構(gòu)系統(tǒng)之間的通信和數(shù)據(jù)交換,可以隨機(jī)應(yīng)變的處理企業(yè)各個(gè)系統(tǒng)之間的整合問(wèn)題。但是同時(shí),Web Service 采用 XML 標(biāo)準(zhǔn)進(jìn)行系統(tǒng)間的數(shù)據(jù)傳輸,加大了傳輸?shù)臄?shù)據(jù)量,尤其是在傳輸

3、一些具有比較嚴(yán)格結(jié)構(gòu)的數(shù)據(jù)時(shí),會(huì)使得傳輸效率有所下降。所以,如何提高 Web Service 傳輸效率成為很多公司進(jìn)行項(xiàng)目部署時(shí)非常關(guān)心的問(wèn)題。目的本文介紹了在 Web Service 實(shí)施和開(kāi)發(fā)過(guò)程中,提高系統(tǒng)效率的一些方法,實(shí)踐證明,這些方法都是非常有效且易于實(shí)現(xiàn)的。不同的方法都有其應(yīng)用領(lǐng)域和優(yōu)缺點(diǎn),我們會(huì)分別進(jìn)行討論。文章的主要目的在于,提供給讀者多種方式的基本解決方案,使得讀者在 Web Service 項(xiàng)目部署時(shí),擁有更多的思路。原因分析Web Service 是采用 XML 標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)傳輸?shù)?。XML 在傳輸過(guò)程中,會(huì)附帶很多數(shù)據(jù)的相關(guān)信息,并以標(biāo)簽的形式表現(xiàn)出來(lái)。在傳輸過(guò)程中,一

4、些情況下,這些標(biāo)簽會(huì)占用一半以上甚至更多的數(shù)據(jù)傳輸量,例如,要傳輸一個(gè)表格信息,如下(表格中的人名為虛構(gòu)的):表 1. 將要進(jìn)行傳輸?shù)谋砀袷纠齆ameCityApartmentAir WangBeijingSome Place表 1 中的數(shù)據(jù)在傳輸過(guò)程中,有可能會(huì)生成下面的 XML 文件: 清單 1. 對(duì)應(yīng)于表 1 數(shù)據(jù)所傳輸?shù)?XML 文件示例 <Heading> <column> Name</column> <column>City</column> <column>Apartment</column>&l

5、t;/Heading><Data Grid> <row> <column>Air Wang</column> <column>Beijing</column> <column>IBM CDL</column> </row></Data Grid> 如果上面的表格中還帶有格式的信息(比如字體,背景顏色等等)的話(huà),那么相應(yīng)的 XML 就會(huì)更加復(fù)雜了。從上述 XML 中我們可以看出,除了數(shù)據(jù)之外,XML 會(huì)附加很多標(biāo)簽信息,這就使得傳輸?shù)臄?shù)據(jù)量增大,當(dāng)所需要傳輸?shù)臄?shù)據(jù)比較多的

6、時(shí)候,XML的標(biāo)簽就會(huì)帶來(lái)比較大的效率問(wèn)題。 解決方案一: 壓縮與解壓縮Web Service 在網(wǎng)絡(luò)中傳輸?shù)氖且?XML 為基礎(chǔ)的消息的請(qǐng)求和響應(yīng)。大量的數(shù)據(jù)傳輸會(huì)使網(wǎng)絡(luò)成為瓶頸。一個(gè)最直接的解決方案就是對(duì)傳輸?shù)南⑦M(jìn)行壓縮。對(duì)于不同規(guī)模的數(shù)據(jù)量,壓縮應(yīng)該有不同的解決方案,下面分別介紹如下:1. 對(duì)于整個(gè) XML 傳輸文件進(jìn)行壓縮數(shù)據(jù)壓縮已經(jīng)發(fā)展了很多年,有很多成熟的技術(shù),算法以及工具包。經(jīng)常用于對(duì)數(shù)據(jù)壓縮的 API 有 gzip 等方式。對(duì)文件進(jìn)行壓縮的做法非常簡(jiǎn)單,就是在發(fā)送 XML 之前對(duì) XML 進(jìn)行壓縮,經(jīng)過(guò)壓縮以后,再在 XML 接收端對(duì)已經(jīng)壓縮的文件進(jìn)行解壓縮。優(yōu)點(diǎn): 該方法的

7、優(yōu)點(diǎn)在于,使用了成熟的壓縮和解壓縮技術(shù),當(dāng)數(shù)據(jù)量比較大的時(shí)候,可以大大提高傳輸效率。對(duì)于純文本的 XML,壓縮可以減少其80%以上的體積。缺點(diǎn):壓縮和解壓縮雖然可以使得 XML 的體積大大減少,但是其過(guò)程卻是十分耗費(fèi)系統(tǒng)資源的。壓縮和解壓縮往往會(huì)具有很大的 CPU 占有率以及內(nèi)存占有率。對(duì)于配置不高的客戶(hù)端甚至是服務(wù)器端,都會(huì)造成不小的壓力。應(yīng)用場(chǎng)景:該技術(shù)應(yīng)用于網(wǎng)絡(luò)瓶頸非常嚴(yán)重的情況或是主機(jī)配置比較高的情況。舉例: 正如本小節(jié)最開(kāi)始已經(jīng)介紹的,現(xiàn)在已經(jīng)有很多成熟的壓縮與解壓縮的 API 提供給開(kāi)發(fā)人員進(jìn)行使用,我們選取其中最常用的 gzip 方式舉例說(shuō)明。一般來(lái)講,系統(tǒng)請(qǐng)求 XML 的體積相

8、對(duì)較小,沒(méi)有必要使用壓縮和解壓縮的方法處理請(qǐng)求 XML。而對(duì)于系統(tǒng)響應(yīng) XML 來(lái)講,一般都包含大量的數(shù)據(jù),導(dǎo)致其體積龐大,需要進(jìn)行壓縮處理。對(duì)響應(yīng) XML 進(jìn)行壓縮的流程如下:服務(wù)器端數(shù)據(jù)模型->序列化操作->利用 gzip 方式對(duì)序列化后的 XML 進(jìn)行壓縮->返回到客戶(hù)端->以 gzip 方式進(jìn)行解壓縮->對(duì)解壓縮后的 XML 進(jìn)行反序列化操作->客戶(hù)端數(shù)據(jù)模型這里需要說(shuō)明的一點(diǎn)是,客戶(hù)端以及服務(wù)器端的數(shù)據(jù)模型需要實(shí)現(xiàn) Serializable 接口。 清單 2. gzip 方式壓縮部分實(shí)現(xiàn)代碼示例(java 實(shí)現(xiàn)) import java.io.*;

9、import java.util.zip.*;public class Compresspublic String gzip(OutputStream pStream) tryGZIPOutputStream stream = new GZIPOutputStream(pStream);return stream.toString();catch(IOException e)return null;在程序?qū)?duì)象模型序列化成 XML 之前,可以使用上面的壓縮方法,對(duì)數(shù)據(jù)流進(jìn)行壓縮。部分代碼如下: 清單 3. 對(duì)象模型序列化后再進(jìn)行壓縮的實(shí)現(xiàn)代碼示例 public class XMLSeriali

10、zerHelperpublic static String saveOBJtoString(Object inputOBJ) throws ConverExceptionByteArrayOutputStream outputStream = null;tryoutputStream = new java.io.ByteArrayOutputStream();m_serializer.save(IXMLSerializable) inputObject, outputStream);return Compress.gzip(outputStream);catch(Exception e)解壓縮

11、的過(guò)程也類(lèi)似于上述代碼。測(cè)試表明,采用 gzip 壓縮可以減少60%以上的網(wǎng)絡(luò)所帶來(lái)的消耗。2. 對(duì)于特定的數(shù)據(jù)進(jìn)行特殊的處理在企業(yè)日常的數(shù)據(jù)傳輸中,往往大量的數(shù)據(jù)具有很多共同的特點(diǎn)。數(shù)據(jù)和數(shù)據(jù)之間往往具有很多相同的地方,或者說(shuō),具有很多重復(fù)的地方。例如,在一個(gè)以 Web Service 為構(gòu)架的報(bào)表處理系統(tǒng)中,報(bào)表往往會(huì)含有很多的空數(shù)據(jù),或者相同屬性和值域的數(shù)據(jù),對(duì)于這樣的情況,可以在代碼中對(duì)特殊情況進(jìn)行特殊的處理。我們同樣以傳輸一個(gè)表格作為例子,如下:表 2. 將要傳輸?shù)暮卸鄠€(gè)空值的表格示例Software soldHardware soldSystem soldOthers120-90

12、-110-可以看到,上述表格具有很多的空值,那么在 XML 中完全可以把空值的部分統(tǒng)一處理,這樣就能大大減少網(wǎng)絡(luò)傳輸?shù)臄?shù)量,其對(duì)應(yīng)的部分 XML 如下: 清單 4. 對(duì)空值進(jìn)行處理后的簡(jiǎn)化 XML 示例 <NULL Value>(1,2),(1,3),(1,4),(2,1),(2,2),(2,4)(3,1),(3,3),(3,4)</NULL Value>優(yōu)點(diǎn):對(duì)于重復(fù)性的數(shù)據(jù)來(lái)說(shuō),該方法可以幾十倍甚至上百倍的減少傳輸?shù)臄?shù)據(jù)量(這取決于數(shù)據(jù)重復(fù)的數(shù)量大小),相對(duì)于第一種壓縮方式,由于只是對(duì)固定形式的數(shù)據(jù)進(jìn)行處理,所以不會(huì)占用很大的 CPU 以及內(nèi)存。缺點(diǎn):數(shù)據(jù)的特點(diǎn)不容

13、易把握,能夠處理的情況比較簡(jiǎn)單和單一。對(duì)于空值或者某些值重復(fù)較多的情況,可以采用本方法。解決方案二: 減少多次調(diào)用,盡量使用一次性的調(diào)用方式。傳統(tǒng)的 RPC 調(diào)用,在多次使用的時(shí)候會(huì)產(chǎn)生很大的效率問(wèn)題。用戶(hù)在進(jìn)行每次遠(yuǎn)程調(diào)用的時(shí)候都要等待網(wǎng)絡(luò)傳輸所耗費(fèi)的時(shí)間。而對(duì)于 Web Service 來(lái)講,很多用戶(hù)仍然將其作為傳統(tǒng)的 RPC 來(lái)進(jìn)行調(diào)用。每次都調(diào)用 Web Service Provider 所提供的函數(shù),造成了效率的極大浪費(fèi)。Web Service 的一大特點(diǎn)在于,可以在本地進(jìn)行一次性的設(shè)置,再把生成的 XML 統(tǒng)一的發(fā)送給服務(wù)的另外一端。對(duì)于用戶(hù)來(lái)講,所有的設(shè)置工作都是在本地進(jìn)行的,用

14、戶(hù)完全感覺(jué)不到網(wǎng)絡(luò)所帶來(lái)的瓶頸,而在最后的數(shù)據(jù)傳輸過(guò)程中,多消耗一些時(shí)間也是值得的。應(yīng)用場(chǎng)景:對(duì)于同用戶(hù)交互的情況,盡可能使用這樣的處理,即減少多次的遠(yuǎn)程調(diào)用,盡量使得程序僅需完成一次調(diào)用。舉一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明問(wèn)題:在一個(gè)用戶(hù)界面上(User Interface),需要進(jìn)行很多的設(shè)置,而這些設(shè)置的每一步都是需要進(jìn)行遠(yuǎn)程調(diào)用的,這樣對(duì)于用戶(hù)來(lái)說(shuō),就會(huì)在每一次的設(shè)置過(guò)程中都等待網(wǎng)絡(luò)傳輸所耗費(fèi)的時(shí)間。而對(duì)于 Web Service 而言,客戶(hù)端所有的工作就是生成請(qǐng)求 XML,所有的設(shè)置工作都可以統(tǒng)一生成一份 XML 文件,然后將其傳送給服務(wù)器端,這樣一來(lái),用戶(hù)只用等待一次的數(shù)據(jù)傳輸時(shí)間(可能相對(duì)時(shí)

15、間較長(zhǎng),但是用戶(hù)只用等待一次,還是值得的),而其他的工作都在服務(wù)器端進(jìn)行處理。優(yōu)點(diǎn):所有數(shù)據(jù)操作在本地進(jìn)行,用戶(hù)在處理數(shù)據(jù)時(shí)不會(huì)感到網(wǎng)絡(luò)所帶來(lái)的停頓。最終所有操作請(qǐng)求統(tǒng)一發(fā)送給服務(wù)器端,使得原本多次等待的遠(yuǎn)程操作只需要一次數(shù)據(jù)傳輸就能完成。舉例:下面的兩幅圖(圖 1 和圖 2)是某數(shù)據(jù)導(dǎo)入向?qū)е械膬蓚€(gè)步驟,用戶(hù)通過(guò)界面設(shè)置數(shù)據(jù)庫(kù)以及數(shù)據(jù)表的信息,從而得到目的數(shù)據(jù)。圖 1. 數(shù)據(jù)導(dǎo)入設(shè)置向?qū)纠粓D 2. 數(shù)據(jù)導(dǎo)入設(shè)置向?qū)纠芏喑鯇W(xué)者容易進(jìn)入的一個(gè)誤區(qū)是在數(shù)據(jù)庫(kù)選擇以后,在程序中直接連接數(shù)據(jù)庫(kù),通過(guò)用戶(hù)提供的用戶(hù)密碼建立數(shù)據(jù)庫(kù)連接,然后在后續(xù)的每一個(gè)步驟中(如圖中的設(shè)定數(shù)據(jù)表?xiàng)l件)都進(jìn)行遠(yuǎn)程

16、函數(shù)調(diào)用,以至于用戶(hù)每一次點(diǎn)擊向?qū)е械摹跋乱徊健卑粹o時(shí)都會(huì)感覺(jué)到網(wǎng)絡(luò)帶來(lái)的瓶頸,例如停頓感,或者更嚴(yán)重的程序一段時(shí)間的沒(méi)有響應(yīng)等等。事實(shí)上,對(duì)于 Web Service 來(lái)講,每一步都可以對(duì)請(qǐng)求 XML 進(jìn)行設(shè)置(這種設(shè)置是在本地進(jìn)行的),當(dāng)所有步驟都完成以后,再將 XML 統(tǒng)一發(fā)送給服務(wù)器端進(jìn)行處理。這樣一來(lái),用戶(hù)在每一步之間的操作都是在本地進(jìn)行的,不會(huì)帶來(lái)多余的網(wǎng)絡(luò)響應(yīng)等待時(shí)間,使得整個(gè)向?qū)У脑O(shè)置工作能夠很快的進(jìn)行。而最后一步完成以后,用戶(hù)對(duì)于網(wǎng)絡(luò)的一次性等待是相對(duì)值得的。在這個(gè)例子中,請(qǐng)求XML的部分結(jié)構(gòu)如下: 清單 5. 客戶(hù)端進(jìn)行數(shù)據(jù)導(dǎo)入設(shè)置的 XML 示例 <Data Ret

17、rieving><Database> <Type>Toolbox</Type> <Pattern>TCP/IP</Pattern> <UserName>Wang Yun</UserName> </Password></Database><Table> <Condition method=more than value=table >2500</Condition> <Condition method=equal to value=table

18、>Wang Yun</Condition> <Condition method=less than value=table>10 days</Condition></Table><Data Retrieving>系統(tǒng)客戶(hù)端對(duì) XML 進(jìn)行設(shè)置的部分示例代碼如下(將對(duì)象模型序列化的過(guò)程,僅列出 Database 節(jié)點(diǎn)): 清單 6. 對(duì)象模型序列化成 XML 示例 public class DataBaseLoginOBJ public Element persistToXML(DataObject pOBJ) Element d

19、bElement = pOBJ.createElement(“Database”); Element typeElement = pOBJ.createElement(“Type”); Element patternElement = pOBJ.createElement(“Pattern”); Element userElement = pOBJ.createElement(“UserName”); Element pwdElement = pOBJ.createElement(“Password”); dbElement.appendChild(typeElement); dbElemen

20、t.appendChild(patternElement); dbElement.appendChild(userElement); dbElement.appendChild(pwdElement); DataObject實(shí)現(xiàn)了org.w3c.dom.Document的接口, Element實(shí)現(xiàn)了org.w3c.dom.Element接口。在完成了整個(gè)請(qǐng)求XML的設(shè)置之后,就將其統(tǒng)一傳輸至服務(wù)器端進(jìn)行處理。 解決方案三: XML 解析器的選擇和優(yōu)化現(xiàn)在軟件領(lǐng)域有很多種類(lèi)的 XML 解析器,最基本的方式有兩種:DOM 和 SAX。對(duì)于不同級(jí)別的XML文件,應(yīng)該使用不同的解析器。有關(guān) XML 解

21、析器的介紹,請(qǐng)參考其他相關(guān)文檔。下面列出他們使用的場(chǎng)景以及優(yōu)缺點(diǎn):表 3. SAX 與 DOM 解析方式的基本比較種類(lèi)優(yōu)點(diǎn)缺點(diǎn)使用場(chǎng)景DOM1.XML樹(shù)在內(nèi)存中完整存儲(chǔ),因此可以直接修改其數(shù)據(jù)和結(jié)構(gòu)。 2.可以通過(guò)該解析器隨時(shí)訪(fǎng)問(wèn)XML樹(shù)中的任何一個(gè)節(jié)點(diǎn)。 3.DOM解析器的API在使用上也相對(duì)比較簡(jiǎn)單。如果XML文檔體積比較大時(shí),將文檔讀入內(nèi)存是非常消耗系統(tǒng)資源的。DOM 是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn)。DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)的集合。這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員在樹(shù)中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能進(jìn)行任何工作。DOM

22、是基于對(duì)象層次結(jié)構(gòu)的。SAXSAX 對(duì)內(nèi)存的要求比較低,因?yàn)樗岄_(kāi)發(fā)人員自己來(lái)決定所要處理的標(biāo)簽。特別是當(dāng)開(kāi)發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX 這種擴(kuò)展能力得到了更好的體現(xiàn)。用SAX方式進(jìn)行XML解析時(shí),需要順序執(zhí)行,所以很難訪(fǎng)問(wèn)到同一文檔中的不同數(shù)據(jù)。此外,在基于該方式的解析編碼過(guò)程也相對(duì)復(fù)雜。對(duì)于含有數(shù)據(jù)量十分巨大,而又不用對(duì)文檔的所有數(shù)據(jù)進(jìn)行遍歷或者分析的時(shí)候,使用該方法十分有效。該方法不用將整個(gè)文檔讀入內(nèi)存,而只需讀取到程序所需的文檔標(biāo)簽處即可。正確的選擇XML解析器的種類(lèi),對(duì)于Web Service系統(tǒng)的效率會(huì)有很大的幫助?,F(xiàn)在有很多廠家提供了基于這兩種類(lèi)型的很多XML

23、解析器,在選擇的時(shí)候,應(yīng)該仔細(xì)閱讀說(shuō)明文檔,慎重進(jìn)行選擇。另外,往往在一個(gè)系統(tǒng)中可以同時(shí)使用這兩種方式,以達(dá)到解析的最高效率。一般來(lái)講,對(duì)于請(qǐng)求XML可以采用DOM的解析方式進(jìn)行解析,而對(duì)于響應(yīng)XML可以使用SAX的方式進(jìn)行解析。解決方案四: 簡(jiǎn)化標(biāo)簽我們知道,Web Service 解決方案在網(wǎng)絡(luò)中傳輸 XML 具有比較復(fù)雜的結(jié)構(gòu)。在傳輸過(guò)程中,不僅僅必要的數(shù)據(jù)被發(fā)送和接收,同時(shí)也會(huì)由于 XML 的結(jié)構(gòu)過(guò)于冗雜而附加了更多的信息進(jìn)行傳輸。舉例如下:系統(tǒng)客戶(hù)端從服務(wù)器端得到的返回?cái)?shù)據(jù)的響應(yīng) XML 結(jié)構(gòu)如下: 清單 7. 在網(wǎng)絡(luò)中傳輸?shù)谋砀駭?shù)據(jù)對(duì)應(yīng)的 XML <Cells> <

24、;Heading Cells> <Column> <Row> Data </Row> </Column> <Column> <Row/> </Column> </Heading Cells> <DataGrid Cells> </DataGrid Cells></Cells>由上面的 XML 我們可以看出,每一個(gè)返回?cái)?shù)值,都至少有 <Column>, </Column>, <Row>, </Row> 來(lái)標(biāo)識(shí)它,

25、也就是說(shuō),如果我們要傳輸一個(gè)表格,那么表格中每一個(gè)數(shù)據(jù)都要伴隨傳輸相應(yīng)的這四個(gè)標(biāo)簽。假設(shè)表格中的每一個(gè)數(shù)據(jù)的字節(jié)數(shù)為8,那么標(biāo)簽所帶來(lái)的附加字節(jié)就將近為數(shù)據(jù)的4倍。如果要傳輸?shù)臄?shù)據(jù)量十分巨大的話(huà),效率自然會(huì)降低許多。所以我們可以采用一種十分簡(jiǎn)單的方式,有效的減少XML所帶來(lái)的附加字節(jié)數(shù),即簡(jiǎn)化XML標(biāo)簽??梢詫⑸厦嫠f(shuō)的XML改寫(xiě)成下面的格式: 清單 8. 對(duì)應(yīng)于清單 7 的簡(jiǎn)化后的 XML <Cells> <Heading Cells> <C> <R> Data </R> </C> <C> <R/>

26、; </C> </Heading Cells> <DataGrid Cells> </DataGrid Cells></Cells>優(yōu)點(diǎn):測(cè)試證明,采用這樣的改進(jìn)方式,可以使得整個(gè)系統(tǒng)的效率提高近一倍甚至更多。而且這樣的處理方式簡(jiǎn)單易行,只是修改標(biāo)簽就可以了。缺點(diǎn):使XML自身代表的意義變得不那么容易讀懂,彌補(bǔ)的方式是一般會(huì)有一個(gè)對(duì)照表,來(lái)說(shuō)明具體簡(jiǎn)化后的 XML 文件的含義。舉例:該方法比較簡(jiǎn)單直觀,這里列出對(duì)照表的一個(gè)例子如下:表 4. 簡(jiǎn)化前后 XML 的對(duì)照表及其含義簡(jiǎn)化前標(biāo)簽簡(jiǎn)化后標(biāo)簽含義RowR表示表格中的行ColumnC

27、表示表格中的列.類(lèi)似上面這樣的聲明表格應(yīng)該作為文檔提供給用戶(hù)。應(yīng)用場(chǎng)景:這里需要說(shuō)明一點(diǎn),XML 能夠清晰的表示出整個(gè)數(shù)據(jù)結(jié)構(gòu),而很多軟件開(kāi)發(fā)人員往往希望利用 XML 來(lái)觀察數(shù)據(jù)的情況,而標(biāo)簽就是協(xié)助他們更好的完成這樣的工作。所以,一般來(lái)講,標(biāo)簽需要盡可能的有意義,由于 C 和 R 可以比較明確的表示 Column 和 Row,并且他們?cè)跀?shù)據(jù)傳輸過(guò)程中是重復(fù)的最多的(占傳輸標(biāo)簽總數(shù)的80%),所以我們進(jìn)行了上述的改動(dòng)。但是對(duì)于像 Cells 這樣的標(biāo)簽,由于其重復(fù)率不是很高,而且我們需要這個(gè)標(biāo)簽具有字面上的意義,所以,類(lèi)似于這樣的情況,我們給予保留。解決方案五: 緩存機(jī)制前面介紹的四種提高效率的方法都是基于 XML 傳輸?shù)?,也就是說(shuō),都是在如何提高 XML 傳輸效率上進(jìn)行介紹的。而第五種機(jī)制對(duì)于任何的軟件解決方案都適用,而對(duì)于 Web Service 解決方案來(lái)講,更是具有錦上添花的作用。緩存機(jī)制最通用的一個(gè)思想是,將使用次數(shù)比較多的數(shù)據(jù)緩存起來(lái),如果再有相同請(qǐng)求時(shí),就將緩存中的數(shù)據(jù)返回。這樣會(huì)減少數(shù)據(jù)邏輯處理所帶來(lái)的時(shí)間。我們以用戶(hù)的一次刷新數(shù)據(jù)的操作為例,介紹一種比較通用的緩存方式,如圖:圖 3. 某數(shù)據(jù)刷

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論