轉(zhuǎn)自http://webservices.ctocio.com.cn/tips/148/6506648.shtml
在互聯(lián)網(wǎng)出現(xiàn)前,任何為慢速調(diào)制解調(diào)器和昂貴線路編寫通信程序的人在一看到XML后,第一個(gè)反映就是覺(jué)得它的格式太浪費(fèi)了。誠(chéng)然,我們很難節(jié)省字節(jié) 來(lái)優(yōu)化XML。傳輸5000個(gè)字節(jié)的數(shù)據(jù)很可能只有500字節(jié)的真實(shí)內(nèi)容,而其它的一點(diǎn)用也沒(méi)有。"Fast Infoset"標(biāo)準(zhǔn)創(chuàng)建了一種壓縮編碼方法來(lái)傳輸XML Information Set,顯著節(jié)省了帶寬和處理能力。
什么是XML Information Set?
盡管很多人都在遲疑是不是需要另一種XML標(biāo)準(zhǔn),但W3C卻創(chuàng)建了"XML Information Set"或者叫"Infoset"推薦書。該說(shuō)明書試圖在更抽象的級(jí)別標(biāo)準(zhǔn)化XML文檔各部分的所有定義,而不是用文字語(yǔ)法。
所有處理XML的說(shuō)明書都可以用Infoset定義,并且保證它們都在說(shuō)同一件事。為了避免使用類似在專門的XML處理API中出 現(xiàn)"Element"等術(shù)語(yǔ),該說(shuō)明書改為稱呼為"Information Items"。它識(shí)別十一種不同類型的信息項(xiàng)。任何能處理所有的項(xiàng)的XML文檔被認(rèn)為擁有完整的Infoset。
Fast Infoset標(biāo)準(zhǔn)
Fast Infoset的編碼標(biāo)準(zhǔn)由International Telecommunications Union (ITU)和International Organization for Standardization (ISO)負(fù)責(zé),分別叫做"ITU-T Rec. X.891"和ISO/IEC 24824-1。該標(biāo)準(zhǔn)發(fā)表在被廣泛使用的電信標(biāo)準(zhǔn)Abstract Syntax Notation One (ASN.1)上。
Fast Infoset的替代方法
由于XML冗余的性質(zhì),也就不奇怪很多人嘗試為更有效的傳輸而壓縮文檔了。廣為人知的ZIP和GZIP編碼是很好的技術(shù)。在客戶端和服務(wù)器端為 數(shù)據(jù)流執(zhí)行zip壓縮和解壓縮的過(guò)濾器很容易安裝,因?yàn)閦ip壓縮只知道字符序列,它不能利用XML文檔的正規(guī)結(jié)構(gòu),還得為解壓縮而消耗處理能力。
Fast Infoset的Sun的Java實(shí)現(xiàn)
Sun的Java Web Service Developers Pack (JWSDP)中實(shí)現(xiàn)了Fast Infoset,而開(kāi)源的Glassfish項(xiàng)目則實(shí)現(xiàn)了第二版。它仍然被認(rèn)為是一種不成熟的技術(shù),并未發(fā)揮全部的潛力。例如,它不能壓縮大塊文字,也不 能支持Fast Infoset說(shuō)明書中的其它高級(jí)特性。
JWSDP 2.0版本提供了一種協(xié)商機(jī)制,通過(guò)它Web服務(wù)客戶端可以在初次與服務(wù)器聯(lián)系時(shí)使用標(biāo)準(zhǔn)HTTP頭"Accept"和"Content-Type",來(lái) 指明自己可以接受Fast Infoset編碼的數(shù)據(jù)。如果Web服務(wù)端已經(jīng)被配置合適的話,那么以后的會(huì)話將都會(huì)使用Fast Infoset編碼。
Fast Infoset實(shí)驗(yàn)
為了有所了解,我們使用Fast Infoset格式的XML文檔,普通文本文檔和zip格式的文檔來(lái)做對(duì)比。我執(zhí)行了一些計(jì)時(shí)實(shí)驗(yàn)。測(cè)試XML文檔是一套XML格式的測(cè)試問(wèn)題,大多數(shù)內(nèi) 容都是文本元素且沒(méi)有命名空間。該文檔比我以前見(jiàn)到的其它Fast Infoset測(cè)試對(duì)象都要大。
我從Sun的Glassfish項(xiàng)目得到最新的Fast Infoset工具集,創(chuàng)建了一個(gè)Fast Infoset編碼版本的文檔,然后用WinZip創(chuàng)建了一個(gè)zip版本的。該工具集提供選擇Document Object Model (DOM), SAX和StAX三種風(fēng)格的解析方式。StAX是XML的Streaming API,它是一個(gè)“拉”方式的API,很多程序員都覺(jué)得它和SAX一起很好用。我只對(duì)DOM創(chuàng)建解析器進(jìn)行了計(jì)時(shí),因?yàn)樗?jīng)常在SOAP Web服務(wù)中被使用。
對(duì)Fast Infoset格式的實(shí)驗(yàn)顯示,所有XML標(biāo)簽都被壓縮成編碼,而文本內(nèi)容還是文字。因此,我又用zip方式壓縮了Fast Infoset文件。以下是結(jié)果文件的大小:
為了從影響實(shí)際Web服務(wù)的網(wǎng)絡(luò)延遲方面來(lái)判斷不同格式的效果,我寫了一個(gè)測(cè)試程序來(lái)計(jì)算從磁盤文件上創(chuàng)建標(biāo)準(zhǔn)Java Document對(duì)象所花的時(shí)間。我事先進(jìn)行了JVM的預(yù)熱,并在計(jì)時(shí)部分外進(jìn)行了垃圾收集。該Java標(biāo)準(zhǔn)庫(kù)被用來(lái)在讀zip文件時(shí)創(chuàng)建一個(gè)到解析器的 輸入流。為了計(jì)時(shí),我使用了JAMon開(kāi)源性能檢測(cè)工具集(強(qiáng)烈推薦)。以下時(shí)間是10次重復(fù)實(shí)驗(yàn)的平均值,單位微秒。
我得出結(jié)論,F(xiàn)ast Infoset編碼顯著降低了解析XML文檔的時(shí)間,但只能稍微降低文本大小,而zip編碼則能很好的以一定處理時(shí)間代價(jià)降低文本大小。我認(rèn)為,我們可以隨著此工具被使用得更廣泛而更好的在Web服務(wù)中使用Fast Infoset。
查看本文國(guó)際來(lái)源
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇