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