3.2 KiB
3.2 KiB
测试报告 (Test Report)
覆盖场景 (Coverage Scenarios)
- 语义化转换:
To[T]和As覆盖基础类型、Slice、Map 及智能 JSON 自动穿透转换。 - 核心类型转换:
Int64,Uint64,Float64,Bool,String,time.Time,包括边界值、零值及非法字符串输入。 - 时间类型原生支持: 支持
time.Time类型及自定义格式(通过 Struct Tagformat=指定)。 - 容器处理:
ToMap,ToSlice,FillMap,FillSlice等泛型工具,支持 Struct 拍平与 KV 序列化。 - 高性能 JSON 引擎:
- 元数据缓存: 引入
encoderStructDescriptor缓存,大幅减少反射开销。 - MapRange 遍历: 优化 Map 序列化路径。
- 批量转义:
writeString优化,大幅提升长文本处理速度。 - 脱敏支持:
ToJSONDesensitizeBytes原生支持字段脱敏,并优化了脱敏路径的计算性能。
- 元数据缓存: 引入
- JSON 构建与解析:
- 零分配摩擦匹配:
normalizeEqual算法实现 0 内存分配的归一化 Key 匹配,支持 UTF-8。 - 智能 Slice 扩容: 尊重预设 Capacity,减少反序列化时的内存重分配。
- FastDecoder: 实现单路径流式解析,支持嵌套指针、Slice 和 Map 的智能初始化。
- 零分配摩擦匹配:
- 深度合并支持: 支持在
Convert过程中对 Map 和 Struct 进行深度递归合并。即使目标 Map 存储的是非指针结构体,也能通过反射寻址实现局部字段覆盖,而不丢失未提及的默认值。 - 指针与接口:
RealValue处理多级指针与接口解包。 - 实用工具:
UniqueAppend(O(n)去重),If(泛型三元),SplitArgs(支持引用格式)。
性能基准 (Benchmark Results - Intel(R) Core(TM) i9)
If: ~0.24 ns/op (0 allocs/op)Int64: ~20 ns/op (0 allocs/op)ToJSON (SimpleStruct): ~297 ns/op (96 B/op) - 相比 v1.2.0 提升约 50%ToJSON (Map - No Sort): ~649 ns/op (152 B/op) - 移除排序后性能大幅提升ToJSON (String Escaping): ~172 ns/op (64 B/op) - 批量转义优化成果ToJSON (Time Support): ~522 ns/op (232 B/op) - 原生 time.Time 处理ParseTime (RFC3339): ~143 ns/op (72 B/op) - 极致优化解析ParseTime (Numeric String): ~188 ns/op (0 B/op) - 紧凑格式零分配ParseTime (Native Number): ~7 ns/op (0 B/op) - 原生数字时间戳 0 分配 & 极致性能FormatTime: ~628 ns/op (120 B/op) - 使用 Replacer 性能倍增UnmarshalJSON (Frictionless): ~421 ns/op (72 B/op) - 0 分配 Key 匹配ToMap: ~816 ns/op (含 Struct 拍平与类型转换)ToSlice: ~1819 ns/opUniqueAppend: 大数据量下的O(n)时间复杂度。
性能概览
| 场景 | 耗时 | 内存分配 | 说明 |
|---|---|---|---|
| 对象深度映射 | ~620 ns/op | 80 B/op | 引入 performRecursiveTo 引擎,就地赋值,无内存逃逸 |
| Struct 序列化 | ~290 ns/op | 96 B/op | 引入元数据缓存,反射开销极低 |
| Map 序列化 | ~650 ns/op | 152 B/op | 采用 MapRange + 无序化,性能翻倍 |
| Frictionless 匹配 | ~420 ns/op | 72 B/op | 零分配 Key 比对,GC 压力极小 |
| 字符串转义 | ~170 ns/op | 64 B/op | 批量处理,长文本优势明显 |