tzfpy Rust 重写🎉
书接上文:
经过一个周末的各种折腾,终于用 Rust 实现了 tzf 的功能,代码在
ringsaturn/tzf-rs
。
又用了晚上跑了多次 CI 将 Python 移植也重写出来了
ringsaturn/tzfpy
。
tzfpy 只要安装 >= 0.11.0
版本的就是用纯 Rust 实现的,在这个版本号之前都是
Python+CGO 实现的。 API 参数和之前一样,没有变化,但是索引命中的时候只需要 3~4
微妙,之前 Python+Go 需要 16 微妙。 最慢的单次查询 300 多微妙,timezonefinder(用
C 实现的多边形算法版本) 最慢的时候会有 1000 多微妙。
Rust 上手的曲线确实高,记得第一次想用 Rust 是因为 orjson 当时的 NumPy 只是比较有限, 想进去魔改支持下 NumPy 没想到没折腾出来。后来各种机会也尝试过 Rust 总是学一点就停了。
上个周末不知为何鼓足了勇气连轴转写了两天整出来了,也算是慢慢入门了吧。
发现 Rust 开源项目的丰富度、成熟度和 Go/Python 比还不够, 比如地理计算这块,Go
里最慢的实现 10 万纳秒之内也能完成处理。 而
geoRust/geo
处理时区多边形遍历搜索需要 170
万纳秒。 还是将 Go 里用的
tidwall/geometry
手动移植过来才实现,
花了半天时间
ringsaturn/geometry-rs
后面会在公司的博客/公众号里连载这一年所做的各种地理计算上的性能优化,这块也是其中一节。
Read other posts