json 解析器哪家強?
全文連結: https://github.com/json-iterator/go-benchmark
目的不是推銷 json-iterator 。而是證明 json-iterator 不比其他的庫更慢,從而使得大家可以把吐槽點放到其他方面:比如特性是不是齊全, api 是不是友好。重新發明 json 解析器是因為經常需要處理奇怪格式的 json ,而又不想把資料轉兩遍。市面上沒有 api 滿足我的需求的,後面我會專門寫一篇 api 介紹的文章來演示 json-iterator 的獨特性。( https://github.com/json-iterator/go/blob/master/README.md )
- jsonparser:
https://github.com/buger/jsonparser
- jsoniter pull-api:
https://github.com/json-iterator/go
- jsoniter reflect-api:
https://github.com/json-iterator/go/blob/master/jsoniter_reflect.go
- encoding/json: golang standard lib
- easy json:
https://github.com/mailru/easyjson
測試裝置
- CPU: i7-6700K @ 4.0G
- Level 1 cache size: 4 x 32 KB 8-way set associative instruction caches
- Level 2 cache size: 4 x 256 KB 4-way set associative caches
- Level 3 cache size: 8 MB 16-way set associative shared cache
- Go: 1.8beta1
small payload
jsonparser | jsoniter pull-api | jsoniter reflect-api | encoding/json | easyjson |
---|---|---|---|---|
599 ns/op | 515 ns/op | 684 ns/op | 2453 ns/op | 687 ns/op |
64 B/op | 64 B/op | 256 B/op | 864 B/op | 64 B/op |
2 allocs/op | 2 allocs/op | 4 allocs/op | 31 allocs/op | 2 allocs/op |
encoding/json 在 i7-6700K 上效能還不錯,但是在快取小一些的 cpu 上效能要比這慢更多。
medium payload
jsonparser | jsoniter pull-api | jsoniter reflect-api | encoding/json | easyjson |
---|---|---|---|---|
5238 ns/op | 4111 ns/op | 4708 ns/op | 24939 ns/op | 7361 ns/op |
104 B/op | 104 B/op | 368 B/op | 808 B/op | 248 B/op |
4 allocs/op | 4 allocs/op | 14 allocs/op | 18 allocs/op | 8 allocs/op |
json-iterator 的反射 api 也是相當快的。
large payload
jsonparser | jsoniter pull-api | encoding/json |
---|---|---|
38334 ns/op | 38463 ns/op | 290778 ns/op |
0 B/op | 0 B/op | 2128 B/op |
0 allocs/op | 0 allocs/op | 46 allocs/op |
jsonparser 在大部分欄位不使用的時候,要快那麼一丁點。
large file
test file used: https://github.com/json-iterator/test-data/blob/master/large-file.json
jsonparser | jsoniter pull-api | encoding/json |
---|---|---|
42698634 ns/op | 37760014 ns/op | 235354502 ns/op |
67107104 B/op | 4248 B/op | 71467896 B/op |
19 allocs/op | 5 allocs/op | 272477 allocs/op |
jsonparser 等其他一大票 json 解析器都是以 [] byte 作為輸入的,簡直是為跑分而生。關於這一點 jackson 的作者也有吐槽( https://www.infoq.com/news/2014/05/jackson-founder-responds )。而 jsoniter 可以支援 io.Reader 作為輸入,對於大檔案處理非常友好。
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Python 管理哪家強?Python
- 晶片檢測哪家強?晶片
- 手寫javascript json解析器JavaScriptJSON
- 雲端計算到底哪家強
- 國內IT科技公司薪酬哪家強?
- 手寫Json解析器學習心得JSON
- 開源Json解析器的淺述JSON
- 1032 挖掘機技術哪家強
- 中國雲端計算方案商哪家強?
- Java JSON解析器效能基準測試JavaJSON
- JSON解析器之Gson、FastJson、JacksonJSONAST
- 故障模型哪家強?PDR 模型來幫忙模型
- Big Sur中Chrome與Safari哪家強?Chrome
- 蘋果、阿里、華為、騰訊,企業大學哪家強?蘋果阿里
- 遊戲訂閱哪家強? OpenCritic做了個統計遊戲
- 挖掘機哪家強?不找藍翔找AI!AI
- 3D探索——Web 3D哪家強?3DWeb
- Hadoop哪家強?Hortonworks、Cloudera、MapR案例集錦HadoopCloud
- 快回答!中國智慧手機在美國哪家強?
- json最強攻略JSON
- AI養豬到底哪家強?馬雲、丁磊、劉強東紛紛入局AI
- 宅也要宅出精彩,遠端辦公哪家強
- PAT-B 1032 挖掘機技術哪家強
- 1032 挖掘機技術哪家強 (20 分)javaJava
- 機器學習狗太苦逼了!自動化調參哪家強?機器學習
- 世界盃要來了,AI預測冠軍哪家強?AI
- 區塊鏈安全如何保證?公有私有哪家強?區塊鏈
- AI For Everyone?深度分析機器學習雲服務哪家強AI機器學習
- 自己動手寫json解析器0x01-分詞JSON分詞
- 幾百行程式碼實現一個 JSON 解析器行程JSON
- 自動化冒煙測試 Unittest , Pytest 哪家強?
- AI創業哪家強?6大選擇給你方向AI創業
- Android視訊直播、點播播放器哪家強?Android播放器
- 電子閱讀器哪家強 Kindle Voyage拆解評測
- 網際網路公司年終獎哪家強?都是土豪啊
- 當官、宮鬥哪家強?淺談官鬥遊戲的前世今生遊戲
- 深度學習哪家強?用資料來一較高下吧深度學習
- 學react哪家強,阿寬頻你看React的生命週期React