王鵬,吳曉東,楊華民
(長春理工大學 計算機科學技術學院,長春 130022)
Ajax(Asynchronous JavaScript and XML)作為Web2.0核心技術被越來越多地使用到Web應用中。Ajax 由 HTML、JavaScript、DHTML(Dynamical Hypertext Markup Language)和 DOM[1](Document Object Model)組成,它使用客戶端腳本異步傳輸、局部刷新技術很大程度上降低了服務器端的壓力。在一些實際項目應用中,如地理信息系統(tǒng),常常需要大量的數(shù)據(jù)交換,使用不同的數(shù)據(jù)格式,客戶和服務器端的響應會有很大不同。常見的數(shù)據(jù)交換格式 有 HTML、XML、JSON、CSV(Comma Separated Values)、GZIP五種。其中,HTML傳輸是最簡單的形式,但缺乏一定的靈活性。XML作為一種通用的標記語言,具有跨平臺、跨語言的優(yōu)勢。然而在實際的應用中,XML的解析工作會讓開發(fā)效率低下。JSON作為為新生代的純文本數(shù)據(jù)格式,在Ajax數(shù)據(jù)交換中有著得天獨厚的應用優(yōu)勢。在不考慮網(wǎng)絡傳輸?shù)那闆r下,解析不同數(shù)據(jù)格式的對象有著明顯的區(qū)別。本文主要從HTML、XML、JSON三種常用的數(shù)據(jù)交換格式探究三者在對象解析方面的區(qū)別,及對實時數(shù)據(jù)傳輸產(chǎn)生的影響。
HTML(HypertextMark-upLanguage)即超文本標記語言或超文本鏈接標示語言,是目前網(wǎng)絡上應用最為廣泛的語言,也是構成網(wǎng)頁文檔的主要語言。HTML文本是由 HTML命令組成的描述性文本,HTML命令可以說明文字、圖形、動畫、聲音、表格、鏈接等。HTML的結構包括頭部(Head)、主體(Body)兩大部分,其中頭部描述瀏覽器所需的信息,而主體則包含所要說明的具體內(nèi)容。在Ajax輕量級應用中,通常以HTML片段的形式實現(xiàn)客戶端和服務器端的簡單數(shù)據(jù)交換。
XML[2](Extensible Markup Language)即可擴展標記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標準通用標記語言)。Xml是Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術。擴展標記語言XML是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標記描述數(shù)據(jù),而這些標記可以用方便的方式建立服務器端使用數(shù)據(jù)格式。一個XML文檔最基本的構成包括:聲明,處理指令(可選)和元素,所有xml文檔都從一個根節(jié)點開始,根節(jié)點包含了一個根元素,其他元素必須包含在根元素中,嵌套在內(nèi)的為子元素,子元素還可以包含子元素,數(shù)據(jù)既可以存在子元素中也可以存在元素的屬性中。
和XML一樣,JSON[3]也是基于純文本的數(shù)據(jù)格式。由于JSON是為JavaScript準備的,因此,JSON的數(shù)據(jù)格式非常簡單,可以用JSON傳輸一個簡單的String,Number或Boolean類型變量,也可以傳輸一個數(shù)組,或者一個復雜的Object對象。在實際應用中通常以Object對象進行數(shù)據(jù)交換,而Object對象在 JSON中是用{}包含一系列無序的Key-Value鍵值對表現(xiàn)的。
影響Ajax應用的實時響應因素包括:
1.網(wǎng)絡傳輸環(huán)境
2.不同數(shù)據(jù)格式的傳輸速度
3.不同數(shù)據(jù)格式的解析速度
由于Ajax在異步傳輸、局部刷新方面的特點,在網(wǎng)絡傳輸環(huán)境一定的情況下,不同數(shù)據(jù)格式的傳輸速度差別不大,但是計算機在對不用數(shù)據(jù)格式對象的解析上所耗費的時間是明顯的。
下面以服務器端實時向客戶端發(fā)送簡單的地圖地理信息[4]為例來說明相同信息在使用不同數(shù)據(jù)格式時的表現(xiàn)形式。服務器端向客戶端返回的信息包括區(qū)域、經(jīng)度、緯度信息。
使用HTML進行傳輸需要對以上坐標信息按一定規(guī)則連成文本信息,在服務器端對信息編碼完成后,進而傳遞至客戶端。在客戶端再按該規(guī)則將文本還原。例如,需要傳遞的坐標信息為{所在區(qū)域:長春;經(jīng)度:125.29889;緯度:43.81185}。傳遞的 HTML片段可確定為"#長春%125.29889%43.81185#",在連接串中使用約定符號組織傳遞的數(shù)據(jù)信息。在客戶端端按所在區(qū)域、經(jīng)度、緯度進行文本還原,實時顯示地理信息。
使用HTML片段,內(nèi)容簡潔,不會浪費過多的帶寬資源,但是需要在服務器端或客戶端以字符串形式構造出HTML文本,不利于編程,也不容易調(diào)試和維護。特別在傳輸?shù)奈谋镜臄?shù)據(jù)結構的復雜的情況下,調(diào)試維護的難度會凸顯出來。
XML的非空標記必須由開始標記和結束標記組成,兩者之間是標記的內(nèi)容。開始標記以"<"開始,以">"結束,中間是標記名稱,結束標記以""開始,以">"結束,中間是標記名稱。在開始標記和結束標記之間即為該標記的值。將以上的HTML片段改寫成XML形式,即:
其中
JSON包含簡單的數(shù)值類型,諸如字符串(string)、數(shù)值(number)等,但使用這些簡單數(shù)據(jù)類型定義復雜格式的數(shù)據(jù)無疑是困難的,在實際應用中以JSON的對象(Object)格式進行定義數(shù)據(jù),以上的XML信息對應轉換為JSON格式即為[5]:
以上 coordinate即為 JSON的一個對象(Object),JSON 在表示數(shù)據(jù)時將屬性和值以":"分開,同一個對象的不同屬性通過","相區(qū)別。
在本實驗中不使用規(guī)則串的形式來傳遞數(shù)據(jù),而是用具體的 div標簽形式傳遞所需要的數(shù)據(jù)信息。使用Ajax輕量級框架JQuery的Load方法,將包含不同個數(shù)對象的 Html片段加載至網(wǎng)頁。實現(xiàn)方式如下:
$("#DataReslultDiv").load("CustomerOrders.htm");
Load方法可以遠程載入HTML代碼并插入到Dom中
單個Html解析對象可以表示為:
Ajax輕量級框架JQuery提供ajax方法,可以實現(xiàn)對xml文件的讀取和xml結點的解析,具體方法為:
其中,type定義了獲取xml的方式為get請求,url為訪問xml文件的地址,dataType定義了訪問的文件類型為 xml,success為訪問成功后執(zhí)行的函數(shù),在該函數(shù)中解析XML結點,計算每個結點解析所需要花費的時間。
以下是一個xml解析對象的表現(xiàn)形式:
其中data為根節(jié)點,area、xcoordinate、ycoordinate為子結點,分別記錄地區(qū)、緯度、經(jīng)度信息。
JQuery提供訪問JSON文件的方法getJSON():
getJSON(paramOne,paramTwo)其中參數(shù)一為要訪問的文件名,第二個參數(shù)為訪問成功后要執(zhí)行的函數(shù),該函數(shù)的參數(shù)data為返回的JSON格式的數(shù)據(jù),在該函數(shù)中完成對JSON數(shù)組元素的解析并記錄解析所需要的時間。
JSON數(shù)據(jù)格式的單個解析對象為:
實驗環(huán)境為單機:
CPU:AMD Athlon(tm)64 X2 Dual-Core Processor TK-53;
Memory:2G;
OS:Windows XP sp 2。
實驗一模擬了在大量解析對象個數(shù)的情況下,計算機分別解析普通HTML、XML以及JSON對象所需要的時間。
表1 實驗一(大量解析對象耗時情況)Tab.1 Time-consuming cases of a large-number analysis objects
從實驗一可以看出使用 Html作為傳輸數(shù)據(jù)格式明顯比XML、JSON獲得更快的響應時間[6],在數(shù)據(jù)量少且數(shù)據(jù)結構不復雜的情況下,使用 Html應為首選的數(shù)據(jù)傳輸格式。同時,計算機對 JSON數(shù)據(jù)對象的解析也快于XML,雖然XML具有很好的通用性,但是在某些應用環(huán)境下使用JSON數(shù)據(jù)格式會縮短響應時間。
實驗二模擬了在隨解析對象個數(shù)遞增的情況下(解析對象個數(shù)分別為 100、500、1000、2000、5000個),解析普通HTML片段、XML以及JSON對象所需要耗費的總時間和解析單個對象所要耗費的時間。
表2 實驗二(不同解析對象數(shù)量耗時情況)Tab.2 Time-consuming cases of a different analysis objects
從實驗二可以看出單個HTML對象的解析時間并沒有隨著解析對象的個數(shù)的增多而增多,在解析對象個數(shù)少量的情況下(100和500),計算機會花費較多的時間比重在 Html文件的解析上,但是當結點個數(shù)增加(1000、2000、5000)單個 Html的對象的解析時間基本持平。單個JSON對象的解析速度要快于XML對象的解析速度,而且XML對象的信息冗余會比JSON大得多,以下是兩者在不同解析對象個數(shù)下的文件大小比較。
表3 不同數(shù)據(jù)格式文件大小比較Tab.3 Comparison of different data format file size
隨著解析對象個數(shù)的增加,XML較之JSON的冗余程度增速會越來越快,冗余比重越來越大,因此與使用XML作為數(shù)據(jù)傳輸格式相比JSON會有更少的數(shù)據(jù)冗余,更快的響應。
在模擬實驗中,選取的解析對象為簡單的一維數(shù)組形式,在較為復雜的應用中會有復雜的數(shù)組或?qū)ο笄短浊闆r出現(xiàn),此時對XML對象的解析會更加耗時,同時增加更多的信息冗余。而使用 Html進行傳輸會使編碼和維護工作異常繁重。使用JSON作為數(shù)據(jù)傳輸格式在不增加冗余的同時,對JSON對象的解析也會比以上兩種數(shù)據(jù)格式更加容易且更易維護。因此,不同的應用背景下選擇不同數(shù)據(jù)傳輸格式會影響 Ajax應用的響應時間,進而影響到用戶體驗。
[1]W3C Document Object Model[EB/OL].http://www.w3.org/DOM,2005.
[2]Extensible markup language(xml)1.0[EB/OL].http://www.w3.org,2006.
[3]json.Introducing JSON[EB/OL].http://www.json.org,2006.
[4]韓敏,馮浩.基于JSON的地理信息數(shù)據(jù)交換方法研究[J].測繪科學,2010,35(1):159-161.
[5]XML與JSON[EB/OL].http://book.51cto.com/art/200-803/67482.htm,2008.
[6]Smullen,C,Smullen S.AJAX Application Server Performance[J].Proceedings of the IEEE SoutheastCon 2007:154-158.