logo

鱼肚的博客

Don't Repeat Yourself

NanoId简介

在浏览一些开源项目时,发现了NanoId这个工具包。简单了解了下它的相关概念,感觉它应该是一个挺有帮助的工具,在这里和大家分享一下。

什么是NanoId ?

根据其官方描述,NanoId是

A tiny, secure, URL-friendly, unique string ID generator for JavaScript.

即一个小巧的、安全的、URL友好的唯一ID生成器。

是不是跟uuid很像?没错,它们是同一类工具。

NanoId与uuid有什么区别?

既然已经有了使用更为广泛的uuid,为什么还要有一个nanoid?

它们之间还是有一些差异点的。

  • 比uuid略快(官方数据是快了16%)
  • 其默认字符集比uuid使用的字符集大一些,所以默认生成的结果比uuid的结果要短

另外nanoid提供了一系列的API可以使用。

  • Async 异步方式调用,避免CPU浪费
  • Non-Secure 不使用硬件随机器,大大提升速度,但碰撞概率会变高
  • 自定义字符集和长度,不同的字符集和不同的长度组合,对应的碰撞概率也会不同

同时nanoid还提供了一些工具:

  • Nanoid-good 确保产生的nanoid中不包含冒犯性的词汇,如F**K之类的。

NanoId有什么使用场景

所有使用uuid产生随机数的场景,都可以考虑使用nanoid进行替代。

还有一些特定的场景,会更适合nanoid。

比如说基于随机数的url短链生成器:uuid产生的结果过长,所以不太适合于URL短链随机id这个应用场景。这个时候就可以用nanoid的自定义字符串集和长度的特性了。

当然url越短,碰撞的概率就越高,还是要做好取舍。

NanoId提供了一个工具,用于计算给定条件下的碰撞概率。参见 https://zelark.github.io/nano-id-cc/

关于NanoId就介绍到这里,希望对大家有所帮助。