为什么 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的上升趋势。

image.png

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角度考虑)

image.png

此外,您还可以在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。

image.png

上图显示了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 让我们一起成长

点赞和在看就是最大的支持❤️


浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报