关于java:换掉UUIDNanoID更快更安全

32次阅读

共计 2077 个字符,预计需要花费 6 分钟才能阅读完成。

前言

UUID 是软件开发中最罕用的通用标识符之一。然而,在过来的几年里,其余的竞品挑战了它的存在。

其中,NanoID 是 UUID 的次要竞争对手之一。

因而,在本文中,咱们将展开讨论 NanoID 的性能、它的亮点以及它的局限性,以便让咱们更好地理解何时应用它。

理解 NanoID 及其用法

对于 JavaScript,生成 UUID 或 NanoID 都非常简单。它们都有对应的 NPM 包来帮忙咱们实现生成。

咱们所须要做的就是运行 npm i nanoid 命令装置 NanoID NPM 库 并在咱们的我的项目中应用它:

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

你是否晓得 NanoID 每周的 NPM 下载量超过 1175.4 万,并且运行起来比 UUID 快 60%?

此外,NanoID 比 UUID 年老了将近 7 年,而且它的 GitHub 星数曾经比 UUID 多。

下图显示了这两个之间的 npm 趋势比拟,咱们能够看到 NanoID 的回升趋势与 UUID 的平坦停顿有强烈的比照。

我心愿这些数字曾经压服你去尝试 NanoID。然而,这两者之间的次要区别很简略。它归结为键应用的字母表。

因为 NanoID 应用比 UUID 更大的字母表,因而较短的 ID 能够用于与较长的 UUID 雷同的目标。

– NanoID 只有 108 个字节那么大

与 UUID 不同,NanoID 的大小要小 4.5 倍,并且没有任何依赖关系。此外,大小限度已用于将大小从另外 35% 减小。

大小缩小间接影响数据的大小。例如,应用 NanoID 的对象小而紧凑,可能用于数据传输和存储。随着应用程序的增长,这些数字变得显著起来。

– 更平安

在大多数随机生成器中,它们应用不平安的 Math.random()。然而,NanoID 应用 crypto module 和 Web Crypto API,意味着 NanoID 更平安。

此外,NanoID 在 ID 生成器的实现过程中应用了本人的算法,称为对立算法,而不是应用“随机 % 字母表”random % alphabet。

咱们创立了一个高质量的技术交换群,与优良的人在一起,本人也会优良起来,连忙点击加群,享受一起成长的高兴。

– 它既疾速又紧凑

NanoID 比 UUID 快 60%。与 UUID 字母表中的 36 个字符不同,NanoID 只有 21 个字符。

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-  

此外,NanoID 反对 14 种不同的编程语言,它们别离是:C#、C++、Clojure 和 ClojureScript、Crystal、Dart & Flutter、Deno、Go、Elixir、Haskell、Janet、Java、Nim、Perl、PHP、带字典的 Python、Ruby、Rust、Swift。

– 兼容性

它还反对 PouchDB、CouchDB WebWorkers、Rollup 以及 React 和 Reach-Native 等库。

咱们能够应用 npx nanoid 在终端中取得惟一 ID。在 JavaScript 中应用 NanoID 惟一的要求是要先装置 NodeJS。

此外,咱们还能够在 Redux toolkit 中找到 NanoID,并将其用于其余用例,如下所示:

import {nanoid} from‘@reduxjs/toolkit’console.log(nanoid()) //‘dgPXxUz_6fWIQBD8XmiSy’

– 自定义字母

NanoID 的另一个现有性能是它容许开发人员应用自定义字母表,咱们能够更改文字或 id 的大小。

如下所示:

import {customAlphabet} from 'nanoid';    
const nanoid = customAlphabet('ABCDEF1234567890', 12);    
model.id = nanoid();  

在下面的示例中,我将自定义字母表定义为 ABCDEF1234567890,并将 Id 的大小定义为 12。

– 没有第三方依赖

因为 NanoID 不依赖任何第三方依赖,随着工夫的推移,它可能变得更加稳固自治。

从久远来看,这有利于优化包的大小,并使其不太容易呈现依赖项带来的问题。

局限性和将来重点

依据 StackOverflow 中的许多专家意见,应用 NanoID 没有显著的毛病或限度。

非人类可读是许多开发人员在 NanoID 中看到的次要毛病,因为它使调试变得更加艰难。然而,与 UUID 相比,NanoID 更短且可读。

另外,如果你应用 NanoID 作为表的主键,如果你应用雷同的列作为汇集索引也会呈现问题。这是因为 NanoID 不是间断的。

在未来……

NanoID 正逐步成为 JavaScript 最受欢迎的惟一 id 生成器,大多数开发人员更喜爱抉择它而不是更喜爱 UUID。

上述基准测试显示了 NanoID 与其余次要 id 生成器相比的性能:应用默认字母表每秒可生成超过 220 万个惟一 ID,应用自定义字母表每秒可生成超过 180 万个惟一 ID。

依据我应用 UUID 和 NanoID 的教训,思考到它的小尺寸、URL 敌对性、安全性和速度,我倡议在任何将来的我的项目中应用 NanoID 而不是 UUID。

正文完
 0