关于go json 的性能效率问题
🕦 by pyList at 2015-06-09 22:46
go 标准库的json 解析很慢,要是考虑到其性能,就考虑使用其它推荐
ffjson
Go更快的JSON序列化
https://github.com/pquerna/ffjson 30
ffjson 为 Go 结构产生 MarshalJSON 和 UnmarshalJSON 功能。新生成的功能,减轻了进行序列化时对运行反射的依赖,速度比之前更快2至3倍。
megajson
A JSON parser generator for high performance encoding and decoding in Go.
https://github.com/benbjohnson/megajson 12
针对json 标准库存在的问题做了优化,它是一个代码生成工具, 通过使用 go/parser 和 go/ast 包去产生你自己类型实体的自定义的 序列号和反序列化代码。 这里的序列号和反序列化知道你的数据类型,所以不会用反射。Go 1.2 下, Megajson 比 encoding/json 包有2倍的性能提升。
go-ujson
ultrajson 的go 实现,接口与 go-simplejson 相似
https://github.com/mreiferson/go-ujson 19
但是它解析的速度远比不上 ujson
测试结果
go 1.4.2
标准库 loads 121.017531ms
go-ujson loads 63.217203ms
simplejson loads 90.202043ms
标准库 dumps 88.908435ms
python 2.7.3
simplejson
Loads Taken 14.655828476ms
Dumps Taken 28.5069942474ms
ujson
Loads Taken 12.7279758453
Dumps Taken 13.9889717102
json
Loads Taken 36.0250473022
Dumps Taken 23.5030651093
其它序列化格式
从结果上上来看, MessagePack , gogo/protobuf ,和 flatbuffers 差不多,这三个优秀的库在序列化和反序列化上各有千秋,而且都是跨语言的。
从便利性上来讲,你可以选择 MessagePack 和 gogo/protobuf 都可以,两者都有大厂在用。
flatbuffers 有点反人类,因为它的操作很底层,而且从结果上来看,序列化的性能要差一点。但是它有一个好处,那就是如果你只需要特定的字段,
你无须将所有的字段都反序列化。从结果上看,不反序列化字段每个调用只用了9.54纳秒,这是因为字段只有在被访问的时候才从byte数组转化为相应的类型。
因此在特殊的场景下,它可以提高N被的性能。但是序列化的代码的面相太难看了。
python 和 go
py ujson > go msgpack x 2
py ujson > go json x 5
py json < go json x 2
参考
- golang msgpack 和 json 性能的简单比较 http://www.golangnote.com/topic/105.html 18
本文网址: https://pylist.com/t/1433861179 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
相关推荐
小工具
标签
python
json
unicode
中文
性能
map
问题
解析
测试
速度
template
golang
tornado
tenjin
断言
类型
注意
跨域
server
websocket
struct
go
convert
在线
type
ujson
indexing
support
pickle
string
sae
kvdb
web
服务器
openwrt
usb
上网卡
共享
网络
xor
解密
加密
方法
bbr
路由
开启
百度
google
pk
三大
必应
ubuntu
gnu
debian
linux
安装
修砖记
变砖
ubnt
er
tftp
轻量级
博客
一款
ulimit
永久
设置
系统
之坑
files
open
服务
js
全屏
浏览器
实现
caddy
https
部署
网站
多个
spotify
chartify
开源
图表
tcpclient
4.0
客户端
简化
搜索引擎
网址
提交
主动
经验
failed
load
devtools
sourcemap
chrome
自动更新
microsoft
mac
关闭
app
store
登录
未知
静音
风扇
主机
笔记本
改造
低功耗
爬虫
组装
微信
尝鲜
视频
体验
cpu
查看
温度
浏览
身份验证
authenticator
迁移
手机
webdriver
微博
selenium
系统启动
固件
编译
宅家
坑记
屏幕
动手
硬件加速
nginx
quic
抢先
最近发表
- Chrome 控制台 DevTools failed to load SourceMap 警告的消除方法
- Mac 关闭 Microsoft 自动更新
- Mac 登录 App Store 出现“发生了未知错误”的解决方法
- 老笔记本改造为无风扇静音主机方案
- 自己组装21瓦低功耗家庭爬虫、文件、web服务器
- 微信视频号尝鲜体验
- Ubuntu/Debian 查看CPU温度的方法
- 在Ubuntu/debian Server 系统使用Chrome 无头浏览模式
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- 使用Golang selenium WebDriver 自动登录微博
- 在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
- Mac 下制作 USB ubuntu/debian 系统启动、安装盘的几种方法
- ubuntu/debian 下自行编译 OpenWRT 固件
- 宅家自己动手换手机屏幕掉坑记
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- 在 Nginx 和 Golang web 上抢先体验 QUIC
最近浏览
- Openwrt 使用USB 4G 上网卡共享网络
- Golang里的类型断言及注意问题
- 用python 实现XOR 加密解密的方法
- Openwrt 路由上开启BBR
- 神奇:google、必应、百度三大翻译PK,百度出奇制胜!
- go json 解析速度测试
- 在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
- UBNT ER-X 变砖 tftp 修砖记
- 一款轻量级的基于SAE Python的博客诞生了
- Linux 系统永久设置ulimit
- Golang 服务之坑:too many open files
- js实现浏览器全屏方法
- 使用caddy 快速部署多个https 网站
- Spotify开源的Python图表生成库chartify
- tornado 4.0 的tornado.tcpclient 简化客户端操作
- 向各搜索引擎主动提交网址的经验