我将 serde_json 字符串的速度提高了 20%

主要观点:作者对serde_json进行性能优化,包括改进错误路径处理、优化字符串解析(如搜索转义字符、解码\u转义等)、处理UTF-8编码等方面,最终使serde_json在各种字符串密集型JSON基准测试中的性能提升了10%、23%和32%。

关键信息:

  • serde_json是Rust中用于序列化和反序列化的框架,使用广泛但存在性能优化空间。
  • 发现serde_json错误路径比成功路径慢很多,瓶颈在于计算位置的函数,通过使用memchr库优化后有显著改善。
  • 对于搜索转义字符,尝试过的两次遍历字符串的方法比一次遍历更慢,最终通过SIMD Within A Register(SWAR)技术在一次遍历中搜索\"和控制字符,虽对短字符串有影响但总体性能提升。
  • 解码\u转义时,使用查找表(LUT)比条件判断更高效,通过巧妙的位运算和数据类型转换进一步优化。
  • UTF-8编码在serde_json中存在零化和复制的问题,手动生成UTF-8可避免memsetmemcpy调用,进一步提高性能。

重要细节:

  • serde_json在不同数据上的速度对比,如canadacitm_catalogtwitter等。
  • 不同优化方法在不同平台(小端和大端)上的实现细节和效果。
  • 优化过程中对各种算法和数据结构的选择及原因,如memchrmemcpyshladd等。
  • 优化对不同类型字符串(如包含连续转义的字符串、空字符串等)的影响及处理方式。
  • 关于编码和解码的各种具体函数和实现细节,如decode_hex_valdecode_four_hex_digits等。
阅读 12
0 条评论