国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

JSON數(shù)據(jù)傳輸效率研究

2011-09-07 10:16段會(huì)川
關(guān)鍵詞:序列化平均值客戶端

高 靜, 段會(huì)川

(山東師范大學(xué)信息科學(xué)與工程學(xué)院,山東濟(jì)南250014)

0 引 言

選擇一種合適的數(shù)據(jù)傳輸格式是Web開發(fā)不可忽視的問題,而數(shù)據(jù)傳輸效率是非常重要的一個(gè)指標(biāo),因此對(duì)不同數(shù)據(jù)傳輸格式的傳輸效率進(jìn)行研究就顯得尤為重要。目前,已有對(duì)XML和FSV格式的數(shù)據(jù)傳輸開銷的研究[1],而JSON序列化機(jī)制因易于編碼和便于機(jī)器解析而受到越來越多的關(guān)注,對(duì)JSON的數(shù)據(jù)傳輸開銷仍未有研究。本文將對(duì)XML、FSV及JSON從數(shù)據(jù)傳輸開銷、數(shù)據(jù)傳輸時(shí)間以及客戶端數(shù)據(jù)反序列化效率3個(gè)角度進(jìn)行比較研究,以求給開發(fā)者選擇數(shù)據(jù)傳輸格式提供有力的參考依據(jù)。

1 JSON簡介

JSON作為一種輕量級(jí)的數(shù)據(jù)傳輸格式,可以在多種語言之間進(jìn)行數(shù)據(jù)交換。JSON易于閱讀和編碼,且它是JavaScript規(guī)范的子集,能被支持JavaScript的瀏覽器所解析,相比XML,減少了解析時(shí)帶來的性能和兼容性問題,這些特性使JSON成為理想的數(shù)據(jù)交換語言。

1.1 JSON語法格式

JSON具有以下主要形式[2-3]:

(1)對(duì)象:是一個(gè)無序的“‘名稱/值’對(duì)”集合。一個(gè)對(duì)象以“{”開始,“}”結(jié)束,每個(gè)“名稱”后跟一個(gè)“:”,“名稱”使用““””括起來“‘名稱/值’”之間使用“,”將其分隔。圖1是JSON創(chuàng)建對(duì)象的格式。

圖1 對(duì)象格式

下面是一個(gè)簡單示例:

var user={"username":"andy","age":"20","sex":"female"}

這個(gè)對(duì)象包含了3個(gè)元素username;age;sex,它們的值分別是 andy;20;female。

(2)數(shù)組:是值的有序集合。一個(gè)數(shù)組以“[”開始,“]”結(jié)束,值之間使用“,”將其分隔。圖2是JSON創(chuàng)建數(shù)組的格式。

圖2 數(shù)組格式

下面是一個(gè)簡單示例:

var user=['lily','tom','sara']

這個(gè)例子表明,在數(shù)組user中包含3個(gè)元素‘lily’,‘tom’,‘sara’。

1.2 JSON序列化與反序列化

序列化(Serialization)是將對(duì)象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。與序列化相對(duì)的就是反序列化,它將流轉(zhuǎn)換為對(duì)象。這兩個(gè)過程結(jié)合起來,可以輕松地存儲(chǔ)和傳輸數(shù)據(jù)[4]。

首先服務(wù)器直接生成JavaScript語句,客戶端獲取后直接用eval方法來獲得這個(gè)對(duì)象。

var mydate=eval("("+dd+")");

通過上面這條語句就可以將從服務(wù)器獲得的JSON結(jié)果dd,轉(zhuǎn)換為JSON對(duì)象mydate。需要注意的是,要在這個(gè)字符串兩端套上小括號(hào)。然后客戶端通過 JavaScript引擎中的eval()函數(shù)反序列化JSON響應(yīng)序列,使之運(yùn)行在客戶的瀏覽器上。

2 數(shù)據(jù)傳輸開銷計(jì)算公式

數(shù)據(jù)傳輸過程中的開銷主要來源于屬性名稱、標(biāo)簽及符號(hào)。以一個(gè)簡單的數(shù)據(jù)表為例,每一列即為一個(gè)屬性,如表1所示。

表1 數(shù)據(jù)表

RamonLawrence對(duì)XML及FSV數(shù)據(jù)傳輸?shù)拈_銷公式[1]已有研究,假設(shè)對(duì)于任一屬性a,S表示a的最大模式(Schema),D表示a的數(shù)據(jù)值(Data),N表示屬性名稱(Name),E表示屬性值為空(Empty)的部分所占的比例。則FSV數(shù)據(jù)傳輸?shù)拈_銷可表示為(S-D),即最大模式與數(shù)據(jù)值大小之差。

XML分為無空屬性XML和含空屬性XML兩類。若用XML描述第一條數(shù)據(jù)記錄的Tel屬性,可表示為。對(duì)于無空屬性XML,即當(dāng)屬性值為空時(shí),不創(chuàng)建元素,數(shù)據(jù)傳輸開銷表示為(2*N+5)*(1-E),5表示開關(guān)標(biāo)簽符號(hào)(‘<’,‘>’,‘/’)共 5個(gè)。對(duì)于含空屬性 XML,即屬性值為空,但標(biāo)簽及屬性名稱仍然保留,若第一條數(shù)據(jù)記錄的Tel屬性值為空,則用XML可表示為,此時(shí)相當(dāng)于E=0,XML數(shù)據(jù)傳輸開銷為2*N+5。

對(duì)于JSON,也分為無空屬性JSON和含空屬性JSON兩類。若用JSON表示第一條數(shù)據(jù)記錄,可表示為 {“No”:“1”,“Sex”:“female”,“Tel”:“123”,“Age”:“10”}。對(duì)于每個(gè)屬性由于屬性名稱無需成對(duì)出現(xiàn),只需一個(gè)表示,另外包含符號(hào)(‘"’,‘"’,‘:’,‘,’)共 6 個(gè),因此,無空屬性JSON(當(dāng)屬性值為空時(shí),不創(chuàng)建元素),數(shù)據(jù)傳輸開銷可表示為(N+6)*(1-E)。對(duì)于含空屬性JSON(屬性值為空,但標(biāo)簽仍然保留),若第一條數(shù)據(jù)記錄的 Tel屬性值為空,則可表示為 {“No”:“1”,“Sex”:“female”,“Tel”:“”,“Age”:“10”},即E=0時(shí),JSON數(shù)據(jù)傳輸開銷為N+6。

經(jīng)過以上分析,得出不同數(shù)據(jù)傳輸格式開銷計(jì)算公式如表2所示。

表2 數(shù)據(jù)傳輸開銷計(jì)算公式

3 實(shí) 驗(yàn)

3.1 統(tǒng)計(jì)數(shù)據(jù)集

實(shí)驗(yàn)所引用的統(tǒng)計(jì)數(shù)據(jù)集[1]如表3所示。這是RamonLawrence由Java程序DBstats通過JDBC連接樣例數(shù)據(jù)庫得來,其中樣例數(shù)據(jù)庫來自MicrosoftAccess的Northwind數(shù)據(jù)庫,以及UCI KDD和ML庫,還有一些互聯(lián)網(wǎng)上的公用數(shù)據(jù)庫。數(shù)據(jù)集分為模式級(jí)和數(shù)據(jù)級(jí),取得了數(shù)據(jù)級(jí)屬性名稱(N),模式(S)及數(shù)據(jù)值(D)等數(shù)值的大小,所取數(shù)據(jù)均保留兩位有效數(shù)字。其中使用比例(D/S)表示數(shù)據(jù)值占模式大小的比例,未用比例(E)表示屬性值為空的部分所占的比例。

表3 統(tǒng)計(jì)數(shù)據(jù)集

由表中數(shù)據(jù)可發(fā)現(xiàn),各數(shù)據(jù)庫屬性名稱(N)平均值大約為8,模式大小(S)平均值大約為20,數(shù)據(jù)值(D)平均值大約為7,數(shù)據(jù)值占模式大小的比例(D/S)平均值大約為40%,而屬性值為空的部分所占比例平均值大約為7%,這些數(shù)據(jù)對(duì)于分析數(shù)據(jù)傳輸開銷具有重要意義。為更直觀地表示,各樣例數(shù)據(jù)庫屬性名稱(N)、模式(S)及數(shù)據(jù)值(D)用折線圖如圖3所示。

圖3 樣例數(shù)據(jù)庫屬性名稱、模式、數(shù)據(jù)值比較

3.2 數(shù)據(jù)傳輸開銷比較

將上節(jié)中統(tǒng)計(jì)數(shù)據(jù)集的數(shù)據(jù)利用表2中各數(shù)據(jù)傳輸格式開銷公式計(jì)算,得到不同數(shù)據(jù)傳輸格式開銷,將數(shù)據(jù)進(jìn)行整理如表4所示(表中數(shù)據(jù)均保留兩位有效數(shù)字)。

由于各樣例數(shù)據(jù)庫數(shù)據(jù)記錄集較大,實(shí)驗(yàn)數(shù)據(jù)具有較強(qiáng)的精確性,而經(jīng)過對(duì)同一數(shù)據(jù)庫數(shù)據(jù)記錄的不同數(shù)據(jù)傳輸格式傳輸,可以得到較為公正的結(jié)果。

表4中,以Northwind數(shù)據(jù)庫為例,已知N=8.96,S=15.24,D=6.86,則FSV數(shù)據(jù)傳輸開銷為S-D=8.38,含空屬性XML數(shù)據(jù)傳輸開銷為2*N+5=22.92,無空屬性XML數(shù)據(jù)傳輸開銷為(2*N+5)*(1-E)=22.29,含空屬性JSON數(shù)據(jù)傳輸開銷為N+6=14.96,無空屬性JSON數(shù)據(jù)傳輸開銷為(N+6)*(1-E)=14.55。以此類推,得到不同數(shù)據(jù)傳輸格式的開銷。為便于直觀比較,將不同數(shù)據(jù)傳輸格式的開銷以條形圖形式表示如圖4所示。

表4 不同數(shù)據(jù)傳輸格式開銷量化比較

圖4 不同數(shù)據(jù)傳輸格式開銷直觀比較

從以上圖表中可以看出:

(1)含空屬性JSON的開銷平均值為13.58,無空屬性JSON的開銷平均值為12.61,兩者之間相差0.97,均明顯小于任何一種XML的數(shù)據(jù)傳輸開銷平均值(20.16或18.73)。其中含空屬性JSON比含空屬性XML的開銷小6.58,無空屬性JSON比無空屬性XML的開銷小6.12。這正是JSON簡潔的數(shù)據(jù)描述格式相比XML復(fù)雜的格式標(biāo)簽所帶來的優(yōu)勢(shì)。

(2)FSV格式的開銷平均值為13.83,兩種JSON格式的數(shù)據(jù)傳輸開銷平均值均略低于FSV。

綜上,JSON的數(shù)據(jù)傳輸開銷是各數(shù)據(jù)傳輸格式中最小的。而數(shù)據(jù)傳輸開銷的減小必然會(huì)帶來數(shù)據(jù)傳輸效率的提高。雖然JSON的數(shù)據(jù)傳輸開銷與FSV相差無幾,但值得一提的是,JSON以其簡潔的編碼形式在數(shù)據(jù)描述方面明顯優(yōu)于FSV。因此,JSON相比較XML與FSV,在數(shù)據(jù)傳輸開銷和數(shù)據(jù)描述簡潔性方面均成為一種理想的數(shù)據(jù)傳輸格式。

3.3 數(shù)據(jù)傳輸效率比較

為了更好的驗(yàn)證JSON的數(shù)據(jù)傳輸效率優(yōu)于其他數(shù)據(jù)傳輸格式,我們搭建一個(gè)實(shí)測(cè)環(huán)境,實(shí)驗(yàn)通過對(duì)不同數(shù)據(jù)傳輸格式傳輸同一組數(shù)據(jù)庫記錄的時(shí)間進(jìn)行比較,間接地比較了數(shù)據(jù)傳輸效率。由于網(wǎng)絡(luò)環(huán)境不穩(wěn)定等原因,實(shí)驗(yàn)數(shù)據(jù)會(huì)有一些波動(dòng),經(jīng)過10次測(cè)試取平均值。實(shí)驗(yàn)結(jié)果如表5所示。

表5 數(shù)據(jù)傳輸效率比較

經(jīng)過分析表格中數(shù)據(jù),大體上來看,以JSON格式傳輸數(shù)據(jù)所消耗的時(shí)間明顯短于以XML格式傳輸數(shù)據(jù)所消耗的時(shí)間,而略短于FSV傳輸數(shù)據(jù)消耗的時(shí)間。這是因?yàn)镴SON生成文件的時(shí)候是利用JSON對(duì)象,使用Java String直接寫入腳本,而XML則要生成一個(gè)doc對(duì)象[6],用輸入輸出流的方式寫入XML文件。另外,無空屬性JSON傳輸數(shù)據(jù)所消耗的時(shí)間小于無空屬性JSON,無空屬性XML傳輸數(shù)據(jù)所消耗的時(shí)間小于含空屬性XML,這是因?yàn)楫?dāng)屬性值為空時(shí),省略掉格式的標(biāo)簽及符號(hào),可以使傳輸負(fù)擔(dān)減小,這樣傳輸效率就相應(yīng)提高了,傳輸時(shí)間也減短了。數(shù)據(jù)傳輸時(shí)間的比較再次證明JSON的數(shù)據(jù)傳輸效率優(yōu)于其他數(shù)據(jù)傳輸格式。

3.4 客戶端數(shù)據(jù)反序列化效率

在客戶端,從服務(wù)器端傳輸過來JSON或XML的數(shù)據(jù)將被反序列化才能獲取其中的數(shù)據(jù),進(jìn)而顯示在客戶端頁面上。其中,XML是基于DOM樹結(jié)構(gòu)的,反序列化XML需要考慮父節(jié)點(diǎn)和子節(jié)點(diǎn),這為反序列化增加了難度。如下是一個(gè)典型的XML格式表示:

而JSON只需要通過JavaScript語言的eval()函數(shù)就可以將JSON數(shù)據(jù)反序列化為JavaScript對(duì)象。如下是上述XML示例對(duì)應(yīng)的JSON格式:

反序列化JSON通常采用如下方法:

實(shí)驗(yàn)通過一個(gè)簡單的測(cè)試程序分別對(duì)JSON或XML格式數(shù)據(jù)反序列化時(shí)間進(jìn)行了比較分析,進(jìn)而比較了兩種格式讀取數(shù)據(jù)時(shí)的反序列化效率。為消除偶然誤差,重復(fù)測(cè)驗(yàn)10次,數(shù)據(jù)反序列化效率分析如圖5所示。

從圖5中可以看出,JSON反序列化時(shí)間明顯小于XML反序列化時(shí)間,這是與JSON和XML本身特殊的結(jié)構(gòu)分不開的。采用JSON格式的數(shù)據(jù)大大降低了反序列化時(shí)的冗余度,使開發(fā)效率提高。若與AJAX技術(shù)相結(jié)合則會(huì)使即時(shí)頁面更新效果更加顯著,更好地提高用戶體驗(yàn)。

4 結(jié)束語

圖5 XML和JSON數(shù)據(jù)反序列化效率分析

本文提出了JSON數(shù)據(jù)傳輸開銷計(jì)算公式。經(jīng)過對(duì)JSON、XML及FSV這3種比較常用的數(shù)據(jù)傳輸格式的開銷、傳輸時(shí)間以及客戶端數(shù)據(jù)反序列化效率的量化比較,發(fā)現(xiàn)JSON的數(shù)據(jù)傳輸效率明顯優(yōu)于其他數(shù)據(jù)傳輸格式,這為Web開發(fā)者對(duì)數(shù)據(jù)傳輸格式的選擇提供了更有力的參考。同時(shí)JSON便于閱讀和編碼,又是JavaScript規(guī)范的子集,便于機(jī)器解析,減少了解析XML帶來的性能和兼容性問題,因此,對(duì)于需考慮流量和網(wǎng)絡(luò)傳輸效率的環(huán)境以及輕量級(jí)的應(yīng)用中,JSON應(yīng)成為首選的數(shù)據(jù)傳輸格式。比如在移動(dòng)應(yīng)用開發(fā)中使用JSON結(jié)合AJAX的模式可以很好的解決移動(dòng)設(shè)備帶寬受限及網(wǎng)絡(luò)流量要求較高的問題。

然而本文還有進(jìn)一步需要提高的地方,針對(duì)數(shù)據(jù)傳輸?shù)木唧w應(yīng)用JSON的數(shù)據(jù)傳輸效率是否會(huì)一直優(yōu)于其他數(shù)據(jù)傳輸格式,這是值得討論的。因此,有必要針對(duì)具體的開發(fā)環(huán)境更為詳細(xì)地討論JSON等數(shù)據(jù)傳輸格式的優(yōu)缺點(diǎn),這也正是我們后續(xù)工作的內(nèi)容。

[1]Ramon Lawrence.The space efficiency of XML[J].Information and Software Technology,2004,46(4):753-759.

[2]Ali Mesbah,Arie van Deursen.A component-and push-based architectural style for AJAX applications[J].The Journal of Systems and Software,2008,81(12):2194-2209.

[3]張濤,黃強(qiáng),毛磊雅,等.一個(gè)基于JSON的對(duì)象序列化算法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(15):98-100.

[4]丁波,晁愛農(nóng).基于Struts2框架的AJAX開發(fā)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(16):3910-3917.

[5]黃強(qiáng),王薇,張曉梅,等.基于JSON和IoC的AJAX-RMI插件[J].計(jì)算機(jī)工程,2009,35(19):71-74.

[6]崔璨,倪宏.使用JSON對(duì)AJAX技術(shù)中的XML性能的優(yōu)化仿真[J].通信技術(shù),2009,42(8):108-114.

[7]王沛,謝俊元.基于總線模型和Json的AJAX安全開發(fā)模型[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(3):586-589.

[8]胡文發(fā),白中英.基于J2EE/J2ME的JSON數(shù)據(jù)交換的探討[J].電子設(shè)計(jì)工程,2009,17(12):102-103.

[9]譚力,楊宗源,謝瑾奎.AJAX技術(shù)的數(shù)據(jù)響應(yīng)優(yōu)化[J].計(jì)算機(jī)工程,2010,36(7):52-54.

猜你喜歡
序列化平均值客戶端
平均值的一組新不等式
基于FlatBuffers的機(jī)車通信數(shù)據(jù)序列化方法應(yīng)用研究
如何建構(gòu)序列化閱讀教學(xué)
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
大樞紐 云平臺(tái) 客戶端——中央人民廣播電臺(tái)的探索之路
Java 反序列化漏洞研究
變力做功時(shí)運(yùn)用F=F1+F2/2的條件
平面圖形中構(gòu)造調(diào)和平均值幾例
潞城市| 宁德市| 牟定县| 赤城县| 柳河县| 鸡东县| 常山县| 基隆市| 隆昌县| 襄汾县| 宜良县| 寿宁县| 平罗县| 鄱阳县| 仪陇县| 宝坻区| 绥江县| 宜阳县| 永寿县| 黎城县| 凌海市| 平顺县| 中超| 榆林市| 自治县| 青川县| 临邑县| 建平县| 焉耆| 田林县| 阳谷县| 鄂托克前旗| 武夷山市| 高阳县| 噶尔县| 岱山县| 墨玉县| 十堰市| 沙田区| 秦皇岛市| 肇州县|