9 个不稳定版本 (3 个重大变更)
0.4.4 | 2022年12月4日 |
---|---|
0.4.3 | 2022年11月30日 |
0.4.2 | 2022年10月4日 |
0.4.1 | 2022年9月25日 |
0.1.0 | 2022年5月9日 |
#1055 in 解析器实现
9,432 每月下载量
用于 8 个 crate (4 个直接使用)
22KB
482 行
Rust 本地 JSON 反序列化器
该仓库包含一个通过引用解析 JSON 的 Rust 实现的高性能库。
为什么不使用 serde-json
?
serde-json
既是基于 serde 模型的 JSON 解析器,也是数据模型(Value
)。Value
是一个拥有数据的结构。
在许多用例中,JSON 可以解析为引用。特别是,当 JSON 字符串包含非 ASCII 字符时,才需要字符串的所有权。
如果可能,通过引用而不是通过值解析 JSON,则存在性能机会。
此 crate 填补了这一空白。在解析例如字符串列表时,此 crate 的速度比 serde-json
快 ~2 倍(见下文)。
安全性
此 crate 是 #![forbid(unsafe_code)]
,并且仅在失败分配时引发恐慌。
基准测试
运行
python3 write_bench_files.py && cargo bench --bench parse
与 serde_json
进行比较。总的来说,此 crate 要么更快,要么与它一样快。一些示例
布尔数组
bool json_deserializer 2^20 time: [26.022 ms 26.056 ms 26.090 ms]
bool serde_json 2^20 time: [30.419 ms 30.468 ms 30.516 ms]
bool simd_json 2^20 time: [31.440 ms 31.486 ms 31.531 ms]
字符串数组
string json_deserializer 2^18 time: [10.106 ms 10.138 ms 10.173 ms]
string serde_json 2^18 time: [23.177 ms 23.209 ms 23.243 ms]
string simd_json 2^18 time: [10.924 ms 10.941 ms 10.959 ms]
# with `RUSTFLAGS='-C target-cpu=native'` (skilake in this case)
string simd_json 2^18 time: [8.0735 ms 8.0887 ms 8.1046 ms]
包含字符串的对象数组
object_string json_deserializer 2^14
time: [2.7631 ms 2.7681 ms 2.7736 ms]
object_string serde_json 2^14
time: [4.3729 ms 4.3823 ms 4.3922 ms]
object_string simd_json 2^14
time: [2.6313 ms 2.6357 ms 2.6401 ms]
包含布尔值的对象数组
object_bool json_deserializer 2^10
time: [144.14 us 144.35 us 144.62 us]
object_bool serde_json 2^10
time: [197.12 us 197.62 us 198.31 us]
object_bool simd_json 2^10
time: [160.87 us 161.33 us 161.77 us]
依赖关系
~185KB