基于 Rust 重新实现的 nanoid —— 性能居然提升了 40+%

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

在这里插入图片描述

笔者在跟随 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
选择该技术栈的原因有两方面

  1. napi-rs 基于 Rust 生态,在实现 native NAPI 模块时可以更少考虑如 C++ 中内存申请释放的负担。

  2. 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值