您好,登錄后才能下訂單哦!
Json 已成為當(dāng)前服務(wù)器與 web 應(yīng)用之間數(shù)據(jù)傳輸?shù)墓J(rèn)標(biāo)準(zhǔn)。
微服務(wù)及分布式架構(gòu)經(jīng)常會(huì)使用 Json 來(lái)傳輸此類文件,因?yàn)檫@已經(jīng)是 webAPI 的事實(shí)標(biāo)準(zhǔn)。
不過(guò)正如許多我們習(xí)以為常的事情一樣,你會(huì)覺(jué)得這是理所當(dāng)然的便不再深入比較。
我們很少會(huì)去想用到的這些 Json 庫(kù)到底有什么不同,但事實(shí)上它們的確是不太一樣的。
因此,我們團(tuán)隊(duì)來(lái)對(duì)常用的三個(gè) Json 庫(kù)運(yùn)行測(cè)試,看看在解析不同大小文件時(shí)哪個(gè)庫(kù)的速度最快。
在給定的文件大小下,你可以看到不同庫(kù)之間的解析速度存在著明顯的差別。
高吞吐量的情況下,會(huì)頻繁傳輸解析小文件,因此一開(kāi)始的時(shí)候可能性能的差距并不明顯。
但如果你需要在非常高負(fù)載下頻繁地解析大量的小文件,差距就開(kāi)始增大了。
不是所有的 Json 庫(kù)都叫"特侖蘇"。如何根據(jù)使用場(chǎng)景才選擇正確的庫(kù)是相當(dāng)重要的。
回到頂部
選擇三個(gè)個(gè)主流的Json 庫(kù)來(lái)進(jìn)行基準(zhǔn)測(cè)試:Jackson, Json .simple,GSON
Yidong Fang 的 Json.simple (https://github.com/fangyidong/Json -simple)。Json.simple 是一個(gè) Json 編解碼的Java工具庫(kù)。它旨在打造一個(gè)輕量簡(jiǎn)單且高性能的工具庫(kù)。
Google 的 Gson (https://github.com/google/gson)。GSON 這個(gè)Java庫(kù)能夠在 Java 對(duì)象和 Json 間進(jìn)行相互轉(zhuǎn)換。同時(shí)它還提供了對(duì)Java泛型的完整支持,而且還不需要你在類上面添加注解。無(wú)需添加注解使用起來(lái)則更為便捷,同時(shí)在無(wú)法修改源代碼的情況下這還是一個(gè)必要的先決條件。
FasterXML 的 Jackson 項(xiàng)目(https://github.com/FasterXML/jackson)。Jackson 是一個(gè)數(shù)據(jù)處理的工具套件,它的亮點(diǎn)是流式的 Json 解析器及生成器。它是專為Java設(shè)計(jì)的,同時(shí)也能處理其它非 Json 的編碼。
回到頂部
我們同時(shí)使用大文件和小文件對(duì)這些庫(kù)進(jìn)行了基準(zhǔn)測(cè)試。隨著文件大小的不同,處理這些文本所需要的系統(tǒng)資源也會(huì)隨之上升。
這個(gè)基準(zhǔn)測(cè)試主要關(guān)注兩個(gè)關(guān)鍵場(chǎng)景:
1.大文件下(190MB)的解析速度與小文件(1KB)下的解析速度。大文件取自這里:https://github.com/zeMirco/sf-city-lots-Json 。
2.小文件是從這里隨機(jī)生成的:http://www.Json -generator.com/。
不管是大文件還是小文件,我們都會(huì)用同一個(gè)庫(kù)重復(fù)運(yùn)行10次。
對(duì)于每一個(gè)大文件,我們都會(huì)用同一個(gè)庫(kù)來(lái)分別運(yùn)行10 次。
而對(duì)于小文件,在單個(gè)庫(kù)的單次運(yùn)行中會(huì)重復(fù)執(zhí)行10000 次。
在小文件測(cè)試的各次迭代中,文件內(nèi)容都不會(huì)駐留在內(nèi)存里。
Jackson 與 Json .simple 領(lǐng)跑了這輪測(cè)試,整體來(lái)看 Jackson 又要略優(yōu)于 Json .simple。
從測(cè)試運(yùn)行的平均結(jié)果來(lái)看,Jackson 與 Json .simple 在大文件上的表現(xiàn)要優(yōu)秀。
而 JsonNP 排名第三落后甚遠(yuǎn),Gson 更是遙遙墊底。
上表記錄的是對(duì)每個(gè)文件解析10次的平均時(shí)間,總的平均時(shí)間見(jiàn)下方。各個(gè)庫(kù)在小文件測(cè)試中奪冠的次數(shù)如下:
GSON - 14
Json P - 5
Jackson -1
Json .simple - 0
Gson 這個(gè)冠軍還是當(dāng)之無(wú)愧的,Json.simple 第二也沒(méi)什么懸念。Jackson這輪卻是墊底了。
盡管 Json.simple 沒(méi)有在任何文件上奪得第一,但總體來(lái)看它的解析速度卻是排名第二位的。
還有一個(gè)值得注意的是,盡管 Jackson 是這輪最慢的庫(kù),但是它在所有文件中的表現(xiàn)都非常一致。
其它三個(gè)庫(kù)雖然偶然會(huì)比 Jackson 快很多,但在另一些文件上的解析速度卻是旗鼓相當(dāng)甚至更差。
回到頂部
解析速度并非衡量一個(gè)Json 庫(kù)的唯一指標(biāo),但它的確非常重要。
通過(guò)運(yùn)行這次基準(zhǔn)測(cè)試,我們發(fā)現(xiàn)沒(méi)有一個(gè)庫(kù)能在所有文件上擊敗對(duì)手。
大文件中表現(xiàn)優(yōu)秀的卻在小文件上栽了根頭,反之亦然。
如果要從解析速度來(lái)看選擇哪個(gè)庫(kù)的話還得取決于你的使用場(chǎng)景。
如果你的應(yīng)用經(jīng)常會(huì)處理大的 Json 文件,那么 Jackson 應(yīng)該是你的菜。Gson 在大文件上表現(xiàn)得相當(dāng)吃力。
如果你主要是處理小文件請(qǐng)求,比如某個(gè)微服務(wù)或者分布式架構(gòu)的初始化,那么 Gson 當(dāng)是首選。Jackson 在小文件上的表現(xiàn)則不如人意。
如果這兩種文件你都經(jīng)常會(huì)處理到,那么在兩輪表現(xiàn)中都位居第二的 Json.simple 對(duì)此類場(chǎng)景則更為適合。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。