为什么 NanoID 正在取代 UUID?
共 2356字,需浏览 5分钟
·
2022-04-18 10:30
大厂技术 高级前端 Node进阶
点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交流群
UUID是软件开发中最常用的通用唯一识别码。然而,在过去几年中,其他替代方案对其提出了挑战。其中,NanoID是UUID的主要竞争对手之一。因此,在本文中,将讨论NanoID的特点、它的亮点以及它的局限性,以便更好地理解他和使用它。
了解NanoID及其用法
JavaScript中,生成UUID或NanoID都非常简单。都有NPM软件包。我们只需使用NPM i NanoID命令安装NanoID NPM库,就能项目中使用它。
import { nanoid } from 'nanoid';
model.id = nanoid();
NanoID每周NPM下载量超过11754K,而且速度比UUID快60%, 此外,NanoID比UUID年轻近7岁,但是它的GitHub star已经比UUID多。下图显示了这两个项目之间的npm趋势比较,我们可以看到与UUID的平稳进展相比,NanoID的上升趋势。
![](https://filescdn.proginn.com/72b05fa265847151fdb4514261f6c510/46f7557883584c89ef0ef3fdb76c75ec.webp)
1.NanoID的大小只有108字节
与UUID不同,NanoID的大小比UUID小4.5倍,并且没有任何依赖性。这直接影响数据的大小。例如,使用NanoID的对象对于数据传输和存储来说既小又紧凑。随着程序的增长,这些特点将变得显而易见。
2.更安全
在大多数随机生成器中,它们使用不安全的Math.random()
。但是,NanoID使用更安全的crypto module
和 Web Crypto API
。此外,NanoID在ID生成器的实现过程中使用了自己的算法,称为uniform algorithm,而不是使用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.兼容性
它还支持PockDB、CouchDB WebWorkers、Rollup以及React和Reach Native等库。我们可以使用npx nanoid在终端中获得唯一的ID。唯一的先决条件是安装NodeJS。(其他语言也能,此处只从nodejs角度考虑)
![](https://filescdn.proginn.com/67646eb21d0316a766217e2d880334ac/9187abf3d22cd710edd2303004fa4fcd.webp)
此外,您还可以在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();
在上面的例子中,我将自定义字母表定义为ABCDEF1234567890,Id的长度为12。
6.无第三方依赖关系
由于NanoID不依赖于任何第三方依赖关系,随着时间的推移,它变得更加稳定、自治。从长远来看,这有助于优化捆绑包的大小,并使其不太容易出现依赖关系带来的问题。
局限性和未来焦点
局限性
基于StackOverflow方面的许多专家意见,使用NanoID没有明显的缺点或局限性。许多开发人员在NanoID中看到的主要缺点是不可读,因为它使调试更加困难。然而,与UUID相比起来,NanoID却要短得多,可读性强得多。此外,如果使用NanoID作为表的主键,那么如果使用同一列作为聚集索引,就会出现问题。这是因为NanoIDs不是连续的。
未来…
NanoID正逐渐成为JavaScript最流行的唯一id生成器,大多数开发人员更喜欢选择它而不是UUID。
![](https://filescdn.proginn.com/0601eaa21fb77f7472d77b56a004e76c/5db6d7419d7e17b14703e94664290a42.webp)
上图显示了NanoID与其他主要id生成器的性能比较。使用默认字母表时,它每秒可以生成超过220万个唯一ID,使用自定义字母表时每秒可以生成超过180万个唯一ID。考虑到NanoID的小尺寸、URL友好性、安全性和速度,建议在未来的项目中使用NanoID而不是UUID。
译自:https://blog.bitsrc.io/why-is-nanoid-replacing-uuid-1b5100e62ed2
少爷,点个关注和在看呗!
Node 社群
我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。
如果你觉得这篇内容对你有帮助,我想请你帮我2个小忙:
1. 点个「在看」,让更多人也能看到这篇文章 2. 订阅官方博客 www.inode.club 让我们一起成长 点赞和在看就是最大的支持❤️