• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      高 靜, 段會川

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

      0 引 言

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

      1 JSON簡介

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

      1.1 JSON語法格式

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

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

      圖1 對象格式

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

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

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

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

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

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

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

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

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

      RamonLawrence對XML及FSV數(shù)據(jù)傳輸?shù)拈_銷公式[1]已有研究,假設(shè)對于任一屬性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屬性,可表示為。對于無空屬性XML,即當(dāng)屬性值為空時(shí),不創(chuàng)建元素,數(shù)據(jù)傳輸開銷表示為(2*N+5)*(1-E),5表示開關(guān)標(biāo)簽符號(‘<’,‘>’,‘/’)共 5個(gè)。對于含空屬性 XML,即屬性值為空,但標(biāo)簽及屬性名稱仍然保留,若第一條數(shù)據(jù)記錄的Tel屬性值為空,則用XML可表示為,此時(shí)相當(dāng)于E=0,XML數(shù)據(jù)傳輸開銷為2*N+5。

      對于JSON,也分為無空屬性JSON和含空屬性JSON兩類。若用JSON表示第一條數(shù)據(jù)記錄,可表示為 {“No”:“1”,“Sex”:“female”,“Tel”:“123”,“Age”:“10”}。對于每個(gè)屬性由于屬性名稱無需成對出現(xiàn),只需一個(gè)表示,另外包含符號(‘"’,‘"’,‘:’,‘,’)共 6 個(gè),因此,無空屬性JSON(當(dāng)屬性值為空時(shí),不創(chuàng)建元素),數(shù)據(jù)傳輸開銷可表示為(N+6)*(1-E)。對于含空屬性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ù)集分為模式級和數(shù)據(jù)級,取得了數(shù)據(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ù)對于分析數(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)過對同一數(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)勢。

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

      綜上,JSON的數(shù)據(jù)傳輸開銷是各數(shù)據(jù)傳輸格式中最小的。而數(shù)據(jù)傳輸開銷的減小必然會帶來數(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í)測環(huán)境,實(shí)驗(yàn)通過對不同數(shù)據(jù)傳輸格式傳輸同一組數(shù)據(jù)庫記錄的時(shí)間進(jìn)行比較,間接地比較了數(shù)據(jù)傳輸效率。由于網(wǎng)絡(luò)環(huán)境不穩(wěn)定等原因,實(shí)驗(yàn)數(shù)據(jù)會有一些波動,經(jīng)過10次測試取平均值。實(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對象,使用Java String直接寫入腳本,而XML則要生成一個(gè)doc對象[6],用輸入輸出流的方式寫入XML文件。另外,無空屬性JSON傳輸數(shù)據(jù)所消耗的時(shí)間小于無空屬性JSON,無空屬性XML傳輸數(shù)據(jù)所消耗的時(shí)間小于含空屬性XML,這是因?yàn)楫?dāng)屬性值為空時(shí),省略掉格式的標(biā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對象。如下是上述XML示例對應(yīng)的JSON格式:

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

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

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

      4 結(jié)束語

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

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

      然而本文還有進(jìn)一步需要提高的地方,針對數(shù)據(jù)傳輸?shù)木唧w應(yīng)用JSON的數(shù)據(jù)傳輸效率是否會一直優(yōu)于其他數(shù)據(jù)傳輸格式,這是值得討論的。因此,有必要針對具體的開發(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的對象序列化算法[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對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.

      猜你喜歡
      序列化平均值客戶端
      “平均值代換”法在數(shù)學(xué)解題中的應(yīng)用
      如何建構(gòu)序列化閱讀教學(xué)
      甘肅教育(2020年14期)2020-09-11 07:58:36
      縣級臺在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
      傳媒評論(2018年4期)2018-06-27 08:20:24
      孵化垂直頻道:新聞客戶端新策略
      傳媒評論(2018年4期)2018-06-27 08:20:16
      基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
      電子測試(2018年10期)2018-06-26 05:53:34
      Java 反序列化漏洞研究
      作文訓(xùn)練微格化、序列化初探
      語文知識(2015年12期)2015-02-28 22:02:15
      平面圖形中構(gòu)造調(diào)和平均值幾例
      基于電流平均值的改進(jìn)無功檢測法
      電測與儀表(2014年6期)2014-04-04 11:59:46
      客戶端空間數(shù)據(jù)緩存策略
      安福县| 珠海市| 萨迦县| 千阳县| 绵竹市| 象山县| 陵水| 包头市| 周至县| 南江县| 恭城| 聂荣县| 胶州市| 台中县| 延边| 达拉特旗| 丰宁| 金湖县| 宜宾县| 哈巴河县| 原阳县| 临夏市| 南昌市| 正镶白旗| 水城县| 靖江市| 凤凰县| 名山县| 星子县| 肥东县| 商南县| 莒南县| 青海省| 绵竹市| 佛山市| 朔州市| 乌兰县| 阆中市| 郸城县| 五台县| 图木舒克市|