从现在开始用 NanoID 会取代UUID

简介: 如果你的项目有生成唯一 key 或者使用 uuid 的场合,那么从现在开始,请使用 NanoID。之前在文章《分享8个可以提高开发效率的JavaScript库》介绍过 NanoID 。NanoID 是一个创建唯一 key 的轻量级的脚本库,在过去有类似需求首先想到的是 uuid ,与其相比 NanoID 要小得多。

如果你的项目有生成唯一 key 或者使用 uuid 的场合,那么从现在开始,请使用 NanoID。之前在文章《分享8个可以提高开发效率的JavaScript库》介绍过 NanoID 。NanoID 是一个创建唯一 key 的轻量级的脚本库,在过去有类似需求首先想到的是 uuid ,与其相比 NanoID 要小得多。

const { nanoid } = require("nanoid");
const key = nanoid();
console.log(key); // U6XRwZsfcDuexQ7m55qdy

从 npmjs.com 信息来看,NanoID 一周的下载量达到上千万,此外,NanoID 比 UUID 小了将近 7 岁,而且它的 GitHub 星数已经超过 UUID 了。下图是两个脚本库的趋势数据图:

image.png

查看网站数据可以点击这里:www.npmtrends.com/nanoid-vs-u…

从上面的数据已经足以说明问题了,下面介绍一下 NanoID 的特点。

体积小

和 UUID 相比,NanoID 的大小要小大概 4.5 倍,压缩大小只有 108 字节,并且没有任何依赖关系。

更安全

在大部分随机生成器使用的是不安全的随机数 Math.random()。而 NanoID 使用 crypto module

此外,NanoID 在 ID 生成器的实现过程中使用了自己的称为统一算法的算法,而不是使用随机的字母表。

更高效

NanoID 比 UUID 快 60%,UUID 的字符表使用 36 个不同字符,而 NanoID 只使用了 21 个字符。

此外,NanoID 还支持 14 种不同的编程语言,它们分别是:

C#、C++、Clojure 和 ClojureScript、Crystal、Dart & Flutter、Deno、Go、Elixir、Haskell、Janet、Java、Nim、Perl、PHP、带字典的 Python、Ruby、Rust、Swift

兼容性

NanoID 还支持 PouchDB、CouchDB WebWorkers、Rollup 以及 React 和 Reach-Native 等库。

灵活性

NanoID 的另一个特点是灵活性,它允许开发人员使用自定义字母表。可以更改文字或 id 的大小,如下所示:

const { customAlphabet } = require("nanoid");
const nanoid = customAlphabet("devpointDEV123456789", 6);
const nid = nanoid();
console.log(nid); // 4it6tp

局限性

根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。

可读性方面(不便于记忆)应该算是 NanoID 的主要缺点,另外,NanoID 不是连续的,因此不能作为数据库表的主键。

总结

NanoID正逐渐成为Javascript中最流行的唯一id生成器,大多数开发人员更愿意选择它而不是 UUID 。在考虑到它的体积小、URL 友好性、安全性和高效,因此建议从现在开始在项目中使用 NanoID 取代UUID 。


相关文章
|
7月前
|
算法
自定义UUID算法
自定义UUID算法
66 0
|
7月前
|
存储 算法 数据库
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
365 0
|
7月前
|
算法 云计算 索引
生成UUID和自定义UUID算法
生成UUID和自定义UUID算法
460 0
|
消息中间件 JavaScript 算法
ULID - 一种比UUID更好的方案
ULID - 一种比UUID更好的方案
|
算法 Java 数据库
如何在java中使用uuid(1)-随机uuid的获取
UUID是国际标准化组织ISO提出的一个概念。UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。使用UUID的一个好处是可以为新的服务创建新的标识符。
419 0
如何在java中使用uuid(1)-随机uuid的获取
|
存储 JavaScript 前端开发
UUID 正在被 NanoID 取代。。。
UUID 正在被 NanoID 取代。。。
228 0
UUID 正在被 NanoID 取代。。。
|
算法 开发者 Python
Uuid 模块 | 学习笔记
快速学习 Uuid 模块
|
分布式计算 算法 Python
Python编程:使用uuid库生成唯一ID
Python编程:使用uuid库生成唯一ID
194 0
|
Java
Java通用方法 -- 唯一识别码(universally unique identifier)(UUID)实现
提供通用唯一识别码(universally unique identifier)(UUID)实现
153 0
|
Java 开发者
UUID 类|学习笔记
快速学习 UUID 类
130 1