成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSON 庫之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

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

 [[266304]]

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

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

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

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

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

JSON 庫

JSON.simple vs GSON vs Jackson vs JSONP

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

下面便是我們所測試的 JSON 庫:

  • Yidong Fang 的 JSON.simple 。JSON.simple 是一個(gè) JSON 編解碼的 Java 工具庫。它旨在打造一個(gè)輕量簡單且高性能的工具庫。
  • Google 的 GSON。GSON 這個(gè) Java 庫能夠在 Java 對象和 JSON 間進(jìn)行相互轉(zhuǎn)換。同時(shí)它還提供了對 Java 泛型的完整支持,而且還不需要你在類上面添加注解。無需添加注解使用起來則更為便捷,同時(shí)在無法修改源代碼的情況下這還是一個(gè)必要的先決條件。
  • FasterXML 的 Jackson 項(xiàng)目。Jackson 是一個(gè)數(shù)據(jù)處理的工具套件,它的亮點(diǎn)是流式的 JSON 解析器及生成器。它是專為 Java 設(shè)計(jì)的,同時(shí)也能處理其它非 JSON 的編碼。從我們在 Github 中的統(tǒng)計(jì)來看,它應(yīng)該是***的 JSON 解析器。
  • Oracle 的 JSONP。JSONP (JSON Processing) 是 JSON 處理的一套 Java API, 從名字來看它就是用來生成及解析 JSON 串的。這是 JSR353 規(guī)范的一個(gè)開源實(shí)現(xiàn)。

基準(zhǔn)測試

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

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

不管是大文件還是小文件,我們都會用同一個(gè)庫重復(fù)運(yùn)行 10 次。對于每一個(gè)大文件,我們都會用同一個(gè)庫來分別運(yùn)行 10 次。而對于小文件,在單個(gè)庫的單次運(yùn)行中會重復(fù)執(zhí)行 10000 次。在小文件測試的各次迭代中,文件內(nèi)容都不會駐留在內(nèi)存里,測試所運(yùn)行的機(jī)器是 AWS 的 c3.large 實(shí)例。

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

大文件結(jié)果

 

JSON 庫之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

結(jié)果相差甚大!Jackson 與 JSON.simple 領(lǐng)跑了這輪測試,整體來看 Jackson 又要略優(yōu)于 JSON.simple。從測試運(yùn)行的平均結(jié)果來看,Jackson 與 JSON.simple 在大文件上的表現(xiàn)要優(yōu)秀一些,而 JSONP 排名第三落后甚遠(yuǎn),GSON 更是遙遙墊底。

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

 

JSON 庫之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

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

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

小文件結(jié)果

 

JSON 庫之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

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

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

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

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

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

 

JSON 庫之性能比較:JSON.simple VS GSON VS Jackson VS JSONP

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

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

總結(jié)

解析速度并非衡量一個(gè) JSON 庫的唯一指標(biāo),但它的確非常重要。通過運(yùn)行這次基準(zhǔn)測試,我們發(fā)現(xiàn)沒有一個(gè)庫能在所有文件上擊敗對手。大文件中表現(xiàn)優(yōu)秀的卻在小文件上栽了根頭,反之亦然。

  • 如果要從解析速度來看選擇哪個(gè)庫的話還得取決于你的使用場景。
  • 如果你的應(yīng)用經(jīng)常會處理大的 JSON 文件,那么 Jackson 應(yīng)該是你的菜。GSON 在大文件上表現(xiàn)得相當(dāng)吃力。
  • 如果你主要是處理小文件請求,比如某個(gè)微服務(wù)或者分布式架構(gòu)的初始化,那么 GSON 當(dāng)是***。Jackson 在小文件上的表現(xiàn)則不如人意。
  • 如果這兩種文件你都經(jīng)常會處理到,那么在兩輪表現(xiàn)中都位居第二的 JSON.simple 對此類場景則更為適合。在不同的文件大小上 Jackson 和 GSON 的表現(xiàn)都不太好。

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

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

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

2021-10-29 08:00:00

JSONJava代碼庫

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

2020-05-18 07:00:00

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

2019-07-16 08:38:34

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

2011-06-08 16:59:04

性能測試載測試壓力測試

2020-08-25 09:14:17

對象存儲文件存儲塊存儲

2022-04-07 13:56:17

Azure谷歌云AWS

2019-09-19 14:55:01

物理CPU線程邏輯CPU

2009-02-06 14:26:37

UbuntuVistaWindows7

2018-05-07 10:04:55

ServerlessGoogle ClouAzure

2009-12-16 15:49:58

VS 2008性能

2022-05-03 10:55:24

DevOpsChefPuppet

2022-05-02 18:21:46

JenkinsKubernetesDevOps

2022-05-05 21:40:53

DatadogSplunkDevOps
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久精品亚洲欧美日韩精品中文字幕 | 国产精品久久久久久久久久久新郎 | 羞羞视频在线观看网站 | 日韩精品一区二区三区 | 欧美日韩一区二区三区四区 | 亚洲 欧美 另类 综合 偷拍 | 99热精品久久 | 亚洲综合在线播放 | 欧美综合久久久 | 激情的网站 | 久久精品色欧美aⅴ一区二区 | 区一区二区三在线观看 | 日日想夜夜操 | 天天爽综合网 | 羞羞的视频在线观看 | 一区二区三区在线看 | 国产乱精品一区二区三区 | 久久久久9999亚洲精品 | 波多野结衣二区 | 国产日韩欧美一区二区 | 日本精品视频 | 九九热免费在线观看 | 亚洲成人精品在线观看 | 国产黄色在线 | 国产网站在线免费观看 | 国产成人99久久亚洲综合精品 | 成人av一区 | 亚洲日本中文 | 亚洲综合在线一区 | 久草免费电影 | 日韩一区二区三区四区五区六区 | av喷水 | 精品日韩一区二区三区av动图 | 在线日韩精品视频 | 国产精品99999999 | 中文字幕一区二区三区不卡 | 成人一区二区视频 | 精品乱码一区二区三四区视频 | 一区二区免费视频 | 激情免费视频 | 日韩精品一区二区三区中文在线 |