偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JSON 庫(kù)之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

開(kāi)發(fā) 前端
JSON 已經(jīng)成為當(dāng)前服務(wù)器與 WEB 應(yīng)用之間數(shù)據(jù)傳輸?shù)墓J(rèn)標(biāo)準(zhǔn),不過(guò)正如許多我們所習(xí)以為常的事情一樣,你會(huì)覺(jué)得這是理所當(dāng)然的便不再深入思考了。

 [[266304]]

Java 中哪個(gè) JSON 庫(kù)的解析速度是最快的?

JSON 已經(jīng)成為當(dāng)前服務(wù)器與 WEB 應(yīng)用之間數(shù)據(jù)傳輸?shù)墓J(rèn)標(biāo)準(zhǔn),不過(guò)正如許多我們所習(xí)以為常的事情一樣,你會(huì)覺(jué)得這是理所當(dāng)然的便不再深入思考了。我們很少會(huì)去想用到的這些 JSON 庫(kù)到底有什么不同,但事實(shí)上它們的確是不太一樣的。因此,我們運(yùn)行了一個(gè)基準(zhǔn)測(cè)試來(lái)對(duì)常用的幾個(gè) JSON 庫(kù)進(jìn)行了測(cè)試,看看在解析不同大小的文件時(shí)哪個(gè)庫(kù)的速度是最快的。下面我會(huì)把結(jié)果分享給大家。

JSON 通常用于傳輸及解析大文件。這對(duì)運(yùn)行在 Hadoop 或者是 Spark 集群上的數(shù)據(jù)處理程序而言是個(gè)很常見(jiàn)的場(chǎng)景。在給定的文件大小下,你可以看到不同庫(kù)之間的解析速度存在著明顯的差別。

高吞吐量的情況下,會(huì)頻繁地傳輸并解析小文件,因此一開(kāi)始的時(shí)候可能性能的差距并不明顯。但如果你需要在非常高負(fù)載下頻繁地解析大量的小文件,差距就開(kāi)始增大了。微服務(wù)及分布式架構(gòu)經(jīng)常會(huì)使用 JSON 來(lái)傳輸此類文件,因?yàn)檫@已經(jīng)是 WEB API 的事實(shí)標(biāo)準(zhǔn)。

不是所有的 JSON 庫(kù)都叫” 特侖蘇”。如何根據(jù)使用場(chǎng)景才選擇正確的庫(kù)是相當(dāng)重要的。希望這個(gè)基準(zhǔn)測(cè)試能夠?qū)δ阌兴鶐椭?/p>

JSON 庫(kù)

JSON.simple vs GSON vs Jackson vs JSONP

我們選擇了四個(gè)主流的 JSON 庫(kù)來(lái)進(jìn)行基準(zhǔn)測(cè)試:JSON.simple, GSON, Jackson 以及 JSONP。在 Java 中進(jìn)行 JSON 解析通常都會(huì)用到這幾個(gè)庫(kù),選擇它們的原因是它們?cè)?Github 項(xiàng)目中的亮相頻率很高。

下面便是我們所測(cè)試的 JSON 庫(kù):

  • Yidong Fang 的 JSON.simple 。JSON.simple 是一個(gè) JSON 編解碼的 Java 工具庫(kù)。它旨在打造一個(gè)輕量簡(jiǎn)單且高性能的工具庫(kù)。
  • 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)目。Jackson 是一個(gè)數(shù)據(jù)處理的工具套件,它的亮點(diǎn)是流式的 JSON 解析器及生成器。它是專為 Java 設(shè)計(jì)的,同時(shí)也能處理其它非 JSON 的編碼。從我們?cè)?Github 中的統(tǒng)計(jì)來(lái)看,它應(yīng)該是***的 JSON 解析器。
  • Oracle 的 JSONP。JSONP (JSON Processing) 是 JSON 處理的一套 Java API, 從名字來(lái)看它就是用來(lái)生成及解析 JSON 串的。這是 JSR353 規(guī)范的一個(gè)開(kāi)源實(shí)現(xiàn)。

基準(zhǔn)測(cè)試

我們同時(shí)使用大文件和小文件對(duì)這些庫(kù)進(jìn)行了基準(zhǔn)測(cè)試。隨著文件大小的不同,處理這些文本所需要的系統(tǒng)資源也會(huì)隨之上升。

這個(gè)基準(zhǔn)測(cè)試主要關(guān)注兩個(gè)關(guān)鍵場(chǎng)景:大文件下 (190MB) 的解析速度與小文件(1KB)下的解析速度。大文件取自這里。小文件是從這里隨機(jī)生成的。

不管是大文件還是小文件,我們都會(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)存里,測(cè)試所運(yùn)行的機(jī)器是 AWS 的 c3.large 實(shí)例。

大文件的完整測(cè)試結(jié)果如下,我對(duì)小文件的結(jié)果求了個(gè)平均值。

大文件結(jié)果

 

JSON 庫(kù)之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

結(jié)果相差甚大!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)秀一些,而 JSONP 排名第三落后甚遠(yuǎn),GSON 更是遙遙墊底。

我們?cè)侔呀Y(jié)果換算成百分比看下。平均來(lái)看 Jackson 要?jiǎng)俪鲆换I。下面是結(jié)果的百分比數(shù)據(jù),可以從兩個(gè)維度來(lái)進(jìn)行比較:

 

JSON 庫(kù)之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

不同庫(kù)之間的性能差別著實(shí)不小。

結(jié)論:Jackson 以略微優(yōu)勢(shì)勝出。JSON.simple 緊隨其后,而剩下兩個(gè)庫(kù)則遠(yuǎn)遠(yuǎn)落后。

小文件結(jié)果

 

JSON 庫(kù)之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

上表記錄的是對(duì)每個(gè)文件解析 10 次的平均時(shí)間,總的平均時(shí)間見(jiàn)下方。各個(gè)庫(kù)在小文件測(cè)試中奪冠的次數(shù)如下:

  • GSON - 14
  • JSONP - 5
  • Jackson -1
  • JSON.simple - 0

這個(gè)結(jié)果貌似很有說(shuō)服力。然而,從所有文件的平均結(jié)果來(lái)看,GSON 這個(gè)冠軍還是當(dāng)之無(wú)愧的,JSON.simple 和 JSONP 的二三名之爭(zhēng)應(yīng)該沒(méi)什么懸念。Jackson 這輪卻是墊底了。盡管 JSON.simple 沒(méi)有在任何文件上奪得***,但總體來(lái)看它的解析速度卻是排名第二位的。而 JSONP 盡管在許多文件上都拿到了冠軍,但平均來(lái)看卻只拿到了第三名的成績(jī)。

還有一個(gè)值得注意的是,盡管 Jackson 是這輪最慢的庫(kù),但是它在所有文件中的表現(xiàn)都非常一致,其它三個(gè)庫(kù)雖然偶然會(huì)比 Jackson 快很多,但在另一些文件上的解析速度卻是旗鼓相當(dāng)甚至更差。

我們?cè)侔堰@些數(shù)字轉(zhuǎn)換成百分比看看,還是同樣的兩個(gè)維度:

 

JSON 庫(kù)之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

和大文件測(cè)試相比,這次的差距相對(duì)要小一些,但也還是不容忽視的。

結(jié)論:很不幸的是,JSON.simple 又以微弱的劣勢(shì)與冠軍失之交臂,這輪 GSON 勝。JSONP 仍是千年老三而這回 Jackson 則趕了個(gè)晚集。

總結(jié)

解析速度并非衡量一個(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)景則更為適合。在不同的文件大小上 Jackson 和 GSON 的表現(xiàn)都不太好。

除非不考慮解析速度,不然 JSONP 完全沒(méi)有什么值得稱道的。它在大文件和小文件上的表現(xiàn)與其它庫(kù)相比都很糟糕。所幸的是,Java 9 很快便會(huì)有原生的 JSON 實(shí)現(xiàn)了,相信 JSONP 將來(lái)的表現(xiàn)仍然值得期待。

終于講完了。如果你對(duì) JSON 庫(kù)的解析速度比較敏感的話,大文件選 Jackson,小文件選 GSON,兩者則 JSON.simple。如果你對(duì)這次的基準(zhǔn)測(cè)試有什么疑問(wèn)請(qǐng)?jiān)谙路搅粞?

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-10-29 08:00:00

JSONJava代碼庫(kù)

2024-06-24 07:00:00

C++RustGo

2023-11-19 21:17:58

GoRust

2019-04-02 15:07:51

API NginxZuul

2010-01-08 13:42:21

JSON VS XML

2017-11-23 22:32:18

框架ScrumXP

2022-12-15 08:54:28

JAVA性能JDK

2011-08-02 16:27:50

SQLNoSQL

2019-07-16 08:38:34

JavaJson庫(kù)數(shù)據(jù)

2020-05-18 07:00:00

性能測(cè)試壓力測(cè)試負(fù)載測(cè)試

2011-06-08 16:59:04

性能測(cè)試載測(cè)試壓力測(cè)試

2020-08-25 09:14:17

對(duì)象存儲(chǔ)文件存儲(chǔ)塊存儲(chǔ)

2022-04-07 13:56:17

Azure谷歌云AWS

2019-09-19 14:55:01

物理CPU線程邏輯CPU

2018-05-07 10:04:55

ServerlessGoogle ClouAzure

2009-02-06 14:26:37

UbuntuVistaWindows7

2022-05-03 10:55:24

DevOpsChefPuppet

2022-05-02 18:21:46

JenkinsKubernetesDevOps

2009-12-16 15:49:58

VS 2008性能

2022-05-05 21:40:53

DatadogSplunkDevOps
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)