# Sonic:给 Go 服务装上"超级引擎"的 JSON 库
> 收录时间:2026-03-02
> 来源:字节跳动开源
---
## 一句话介绍
Sonic 是字节跳动开源的高性能 Go JSON 库,通过 JIT、SIMD、零拷贝等技术,在抖音、今日头条等核心业务中累计节省**数十万核** CPU 资源。
---
## 为什么需要 Sonic?
字节跳动发现,JSON 编解码开销占整体 CPU 使用的近 **10%**,极端情况下超过 **40%**。
就像买了一辆跑车,却一直在用一挡行驶。
---
## 四大"超级武器"
### 1. JIT(即时编译)- 量体裁衣
为固定结构体生成专门的编解码汇编代码,不走通用反射路径。
```go
import "github.com/bytedance/sonic"
type Product struct {
ID string `json:"id"`
Name string `json:"name"`
Price float64 `json:"price"`
Stock int `json:"stock,string"`
}
// 预热:提前编译,避免首次调用延迟
func init() {
sonic.Pretouch(reflect.TypeOf(Product{}))
}
```
### 2. SIMD(单指令多数据)- 批量处理
利用 CPU SIMD 指令集,一次处理 16-32 个字节。
- 标准库:逐个字符检查(单手拣豆子)
- Sonic:批量并行处理(用簸箕一次处理一大堆)
### 3. 零拷贝与智能内存管理
简单字符串直接引用原始数据,不创建副本。
### 4. 可选特性 = 极致速度
默认关闭高成本特性:
- 不排序 Map 键(节省 ~10% 性能)
- 不转义 HTML(节省 ~15% 性能)
```go
// 默认不排序(更快)
sonic.Marshal(m)
// 需要排序时手动开启
encoder.Encode(m, encoder.SortMapKeys)
```
---
## 快速入门
### 基础使用(无缝替换标准库)
```go
import "github.com/bytedance/sonic"
// 序列化
jsonBytes, err := sonic.Marshal(&data)
// 反序列化
err = sonic.UnmarshalString(jsonStr, &newData)
```
### 流式处理(大文件)
```go
// 流式解码
decoder := sonic.ConfigDefault.NewDecoder(reader)
for {
var item map[string]interface{}
if err := decoder.Decode(&item); err == io.EOF {
break
}
}
// 流式编码
encoder := sonic.ConfigDefault.NewEncoder(&buf)
for _, item := range items {
encoder.Encode(item)
}
```
### AST 操作(精准控制)
```go
// 获取特定节点(零拷贝)
node, _ := sonic.GetFromString(jsonStr, "user", "posts", 0, "title")
title, _ := node.String()
// 修改 JSON
root, _ := sonic.GetFromString(jsonStr)
root.Get("user").Set("age", sonic.NewNumber("31"))
```
---
## 三种配置模式
| 配置 | 特点 | 适用场景 |
|-----|------|---------|
| `ConfigDefault` | 平衡性能与安全 | 大多数情况 |
| `ConfigStd` | 完全兼容 encoding/json | 需要兼容性 |
| `ConfigFastest` | 极致性能,放宽检查 | 性能敏感场景 |
---
## 性能对比
| 操作 | 标准库 | Sonic | 提升 |
|-----|-------|-------|------|
| 小结构体编码 | 基准 | **6-10x** | 显著 |
| 大结构体解码 | 基准 | **3-5x** | 显著 |
| 流式处理 | 基准 | **2-3x** | 明显 |
---
## 落地成果
- **抖音**:核心接口 JSON 处理
- **今日头条**:大规模数据处理
- **累计节省**:数十万核 CPU 资源
---
## 资源链接
- **GitHub**: https://github.com/bytedance/sonic
- **性能数据**: https://github.com/bytedance/sonic#benchmarks
- **技术博客**: https://zhuanlan.zhihu.com/p/586050976
---
#Go #Golang #JSON #高性能 #字节跳动 #开源项目 #小凯
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!