为什么 NanoID 取代了 UUID? - bitsrc


NanoID是一个小巧的、URL 友好的 JavaScript 唯一字符串生成器,在本文中,我将讨论 NanoID 的特性、它的亮点以及它的局限性,以便您更好地了解何时使用它。
 
了解 NanoID 及其用法
对于 JavaScript,生成 UUID 或 NanoID 非常简单。他们都有 NPM 包来帮助你。
您需要做的就是使用命令安装NanoID NPM 库npm i nanoid并在您的项目中使用它。

import { nanoid } from 'nanoid';
model.id = nanoid();

您是否知道 NanoID 每周的 NPM 下载量超过 11,754K,并且比 UUID 快 60%?
此外,NanoID 比 UUID 小了将近 7 岁,而且它的 GitHub 星数已经比 UUID 多。
我希望这些数字已经说服你尝试 NanoID。
但是,这两者之间的主要区别很简单。它归结为键使用的字母表。
由于 NanoID 使用比 UUID 更大的字母表,因此较短的 ID 可以用于与较长的 UUID 相同的目的。
 
1. NanoID 大小只有 108 字节
与 UUID 不同,NanoID 的大小要小 4.5 倍,并且没有任何依赖关系。此外,大小限制已用于将大小从另外 35% 减小。
大小减少直接影响数据的大小。例如,使用 NanoID 的对象小而紧凑,用于数据传输和存储。随着应用程序的增长,这些数字变得可见。
 
2. 更安全
在大多数随机生成器中,它们使用 unsafe Math.random()。但是,NanoID 使用crypto moduleWeb Crypto API更安全。此外,NanoID在 ID 生成器的实现过程中使用了自己的称为统一算法的算法,而不是使用random % alphabet
 
3. 快速紧凑
NanoID 比 UUID 快 60%。与 UUID 字母表中的 36 个字符不同,NanoID 只有 21 个字符。
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-
此外,NanoID 支持 14 种不同的编程语言,它们是:

C#, C++, Clojure and ClojureScript, Crystal, Dart & Flutter, Deno, Go, Elixir, Haskell, Janet, Java, Nim, Perl, PHP, Python with dictionaries, Ruby , Rust, Swift

 
4. 兼容性
它还支持 PouchDB、CouchDB WebWorkers、Rollup 以及 React 和 Reach-Native 等库。
您可以通过使用在终端中获得唯一 IDnpx nanoid.唯一的先决条件是安装 NodeJS。
此外,您还可以在Redux 工具包中找到 NanoID,并将其用于其他用例,如下所示;
import { nanoid } from '@reduxjs/toolkit' 
console.log(nanoid()) //'dgPXxUz_6fWIQBD8XmiSy'

 
5. 自定义字母
NanoID 的另一个现有功能是它允许开发人员使用自定义字母表。您可以更改文字或 id 的大小,如下所示:
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('ABCDEF1234567890', 12);
model.id = nanoid();

在上面的例子中,我定义了一个自定义的 Alphabet:ABCDEF1234567890。并将 Id 的大小定义为 12。
 
6. 没有第三方依赖
由于 NanoID 不依赖任何第三方依赖,随着时间的推移,它变得更加稳定自治。
从长远来看,这有利于优化包大小,并使其不太容易出现依赖项带来的问题。
 
局限性和未来重点
根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。
非人类可读是许多开发人员在 NanoID 中看到的主要缺点,因为它使调试变得更加困难。但是,与 UUID 相比,NanoID 更短且可读。
另外,如果你使用 NanoID 作为表的主键,如果你使用相同的列作为聚集索引,也会出现问题。这是因为 NanoID 不是连续的。
将来…
NanoID 正逐渐成为最流行的 JavaScript 唯一 id 生成器,大多数开发人员更喜欢选择它而不是 UUID。