
笔者在跟随
Rust重写一切的风气下 基于Rust实现了 napi-nanoid在
node环境下相比原版nanoid.js性能提升 40+%
跑分: Linux x64 gnu, Intel® Xeon® Platinum 8370C CPU @ 2.80GHz, Node.js 16.15.1 (runs: 6842925183)
目录
挑选技术栈
笔者这里选择了 napi-rs 的作为基础实现 napi-nanoid;
选择该技术栈的原因有两方面
-
napi-rs基于Rust生态,在实现native NAPI模块时可以更少考虑如C++中内存申请释放的负担。 -
napi-rs的官方文档非常完整,提供了多个优秀的实践示例。
官网: napi.rs
创建 napi-rs 工程
基于 napi-rs/package-template
.
├── Cargo.lock
├── Cargo.toml
├── LICENSE
├── README.md
├── __test__ // 单元测试
├── benchmark // 性能测试
├── build.rs
├── index.d.ts
├── index.js
├── npm // 多平台入口
├── package.json
├── rustfmt.toml
├── src // source
├── tsconfig.json
└── yarn.lock
基于 Rust 实现 nanoid 生成逻辑
实现调用方法入口
调用方法设计了 .nanoid() 和 .non_secure() 高安全和非安全两个方法;
这里两个方法的设计参考了 nanoid.js
#[napi]
pub fn nanoid() -> String {
format(nanoid::rngs::default, &nanoid::alphabet::SAFE, 21)
}
#[napi]
pub fn non_secure() -> String {
format(nanoid::rngs::non_secure, &nanoid::alphabet::SAFE, 21)
}
实现最核心的 format 逻辑
实现过程中用到了宏来提供随机数生成的缓冲区;这里的实现思路也是参考了 nanoid.js
fn format(random: fn(usize) -> Vec<u8>

本文介绍了作者基于 Rust 重新实现的 nanoid 库,性能提升超过 40%,并在 Node.js 环境中进行测试。作者详细讲述了挑选 Rust 技术栈的原因,创建 N-API 工程的过程,以及如何实现和优化核心生成逻辑。通过 benchmark 对比,展示了新实现与原版及其它随机 ID 生成库的性能差异,并已将新库发布到多个平台。
最低0.47元/天 解锁文章
780

被折叠的 条评论
为什么被折叠?



