2026-04-30 22:16:01 +08:00
|
|
|
|
# 测试报告 (Test Report)
|
|
|
|
|
|
|
|
|
|
|
|
## 覆盖场景 (Coverage Scenarios)
|
2026-05-04 12:15:34 +08:00
|
|
|
|
- **语义化转换**: `To[T]` 和 `As` 覆盖基础类型、Slice、Map 及智能 JSON 自动穿透转换。
|
|
|
|
|
|
- **核心类型转换**: `Int64`, `Uint64`, `Float64`, `Bool`, `String`, `time.Time`,包括边界值、零值及非法字符串输入。
|
|
|
|
|
|
- **时间类型原生支持**: 支持 `time.Time` 类型及自定义格式(通过 Struct Tag `format=` 指定)。
|
|
|
|
|
|
- **容器处理**: `ToMap`, `ToSlice`, `FillMap`, `FillSlice` 等泛型工具,支持 Struct 拍平与 KV 序列化。
|
|
|
|
|
|
- **高性能 JSON 引擎**:
|
|
|
|
|
|
- **元数据缓存**: 引入 `encoderStructDescriptor` 缓存,大幅减少反射开销。
|
|
|
|
|
|
- **MapRange 遍历**: 优化 Map 序列化路径。
|
|
|
|
|
|
- **批量转义**: `writeString` 优化,大幅提升长文本处理速度。
|
|
|
|
|
|
- **脱敏支持**: `ToJSONDesensitizeBytes` 原生支持字段脱敏,并优化了脱敏路径的计算性能。
|
|
|
|
|
|
- **JSON 构建与解析**:
|
|
|
|
|
|
- **零分配摩擦匹配**: `normalizeEqual` 算法实现 0 内存分配的归一化 Key 匹配,支持 UTF-8。
|
|
|
|
|
|
- **智能 Slice 扩容**: 尊重预设 Capacity,减少反序列化时的内存重分配。
|
|
|
|
|
|
- **FastDecoder**: 实现单路径流式解析,支持嵌套指针、Slice 和 Map 的智能初始化。
|
2026-04-30 22:16:01 +08:00
|
|
|
|
- **指针与接口**: `RealValue` 处理多级指针与接口解包。
|
2026-05-04 12:15:34 +08:00
|
|
|
|
- **实用工具**: `UniqueAppend` ($O(n)$ 去重),`If` (泛型三元),`SplitArgs` (支持引用格式)。
|
2026-04-30 22:16:01 +08:00
|
|
|
|
|
|
|
|
|
|
## 性能基准 (Benchmark Results - Intel(R) Core(TM) i9)
|
2026-05-04 12:15:34 +08:00
|
|
|
|
- `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) - 批量转义优化成果
|
2026-05-04 14:51:13 +08:00
|
|
|
|
- `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 性能倍增
|
2026-05-04 12:15:34 +08:00
|
|
|
|
- `UnmarshalJSON (Frictionless)`: **~421 ns/op** (72 B/op) - 0 分配 Key 匹配
|
|
|
|
|
|
- `ToMap`: ~816 ns/op (含 Struct 拍平与类型转换)
|
|
|
|
|
|
- `ToSlice`: ~1819 ns/op
|
2026-05-02 23:00:44 +08:00
|
|
|
|
- `UniqueAppend`: 大数据量下的 $O(n)$ 时间复杂度。
|
2026-05-04 14:10:18 +08:00
|
|
|
|
|
|
|
|
|
|
### 性能概览
|
|
|
|
|
|
| 场景 | 耗时 | 内存分配 | 说明 |
|
|
|
|
|
|
| :--- | :--- | :--- | :--- |
|
|
|
|
|
|
| **对象深度映射** | ~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 | 批量处理,长文本优势明显 |
|