关于go json 的性能效率问题
🕦 by pyList at 2015-06-09 22:46
go 标准库的json 解析很慢,要是考虑到其性能,就考虑使用其它推荐
ffjson
Go更快的JSON序列化
https://github.com/pquerna/ffjson 27
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 18
但是它解析的速度远比不上 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
问题
go
web
服务器
golang
断言
类型
注意
跨域
server
tornado
websocket
解析
测试
速度
struct
convert
在线
type
ujson
indexing
support
pickle
string
sae
kvdb
template
tenjin
低功耗
爬虫
组装
google
身份验证
authenticator
迁移
手机
bbr
openwrt
路由
开启
sqlite3
连接池
ssdb
遍历
数据库
方法
nginx
quic
抢先
国内
pkcs7
js
crypto
aes
ecb
caddy
https
部署
网站
多个
硬件加速
ubnt
er
固件
app
mac
store
登录
未知
bottle
uwsgi
搭建
环境
搜索引擎
网址
提交
主动
经验
api
自动
字符串
分割
英文
usb
上网卡
共享
网络
自动更新
microsoft
关闭
静音
风扇
主机
笔记本
改造
微信
尝鲜
视频
体验
cpu
debian
ubuntu
查看
温度
chrome
浏览
webdriver
微博
selenium
gnu
linux
安装
系统启动
编译
宅家
坑记
屏幕
动手
useragent
蜘蛛
真假
识别
最近发表
- 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
- 从UserAgent识别搜索引擎并判断真假蜘蛛
最近浏览
- 自己组装21瓦低功耗家庭爬虫、文件、web服务器
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- Openwrt 路由上开启BBR
- python SQLite3 连接池
- SSDB 数据库遍历的方法
- 在 Nginx 和 Golang web 上抢先体验 QUIC
- OpenWrt 国内源
- python & js Crypto AES ECB Pkcs7 加密解密实现
- 使用caddy 快速部署多个https 网站
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- Mac 登录 App Store 出现“发生了未知错误”的解决方法
- Bottle + UWSGI + Nginx 环境搭建过程
- 向各搜索引擎主动提交网址的经验
- 利用 API 自动向搜索引擎提交网址
- python 分割中文英文混合字符串的正确方法
- Openwrt 使用USB 4G 上网卡共享网络