比UUID更轻量的唯一ID生成器
大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,或者一些限时福利,错过了就是错过了。所以建议大家加个星标,就能第一时间收到推送。

「前端实验室」
专注分享 Github、Gitee 等开源社区优质的前端项目、前端技术、前端学习资源以及前端资讯等各种有趣实用的前端内容。大家好,我是「前端实验室」爱分享的了不起~
给大家分享几个Webstorm免费的激活码
为了防止被和谐,需要的小伙伴
微信扫一扫,关注公众号:前端实验室
回复“aaaa8”,获取激活码
引子
唯一标识符
是我们项目开发中常常用到的需求。
当碰到这个问题,大部分小伙伴第一时间想到的就是UUID
。
诚然,UUID 自问世以来,前前后后开发了5个版本。最常用的要属 UUID4
了。一起来回顾下它的使用。
UUID
先引入依赖
npm i uuid --save
接着就可以导入使用了
const uuidv4 = require('uuid/v4');
// 生成一个理论上不重复的128位16进制表示的数字
uuidv4(); // 0d90c8ac-7c21-486a-a132-39177211d1d4
嗯嗯!确实简单好用!
但今天要给大家分享 UUID 最主要的竞争对手:NanoID

NanoID
NanoID, 是一个小巧、安全、URL友好、唯一的 JavaScript 字符串 ID 生成器。
NanoID 也同样有NPM包来帮我们实现唯一的标识符。
npm i nanoid
import { nanoid } from 'nanoid'
model.id = nanoid()
//=> "V1StGXR8_Z5jdHi6B-myT"
UUID和NanoID的区别
-
NanoID 大小只有 108 字节 与 UUID 不同,NanoID 的大小要 小 4.5 倍
,并且没有任何依赖关系。此外,大小限制已将大小从另外 35% 减小。
大小减少直接影响数据的大小。例如,使用 NanoID 的对象小而紧凑,用于数据传输和存储。
-
更安全 在大多数的随机生成器中,他们使用不安全的Math.random()。但是,NanoID使用crypto module和Web Crypto API,这是更安全的。
另外,NanoID在实现ID生成器的过程中使用了它自己的算法,称为统一算法
,而不是使用”随机%的字母表”。
Web Crypto API :https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API
crypto module:https://nodejs.org/api/crypto.html
统一算法:https://github.com/ai/nanoid/blob/main/index.js
-
快速紧凑 NanoID比UUID 快60%
。在UUID的字母表里有36个字符,而NanoID只有21个字符。
因此NanoID较短的 ID 可以用于与较长的 UUID 表示相同的目的。
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
-
兼容性
它还支持PouchDB、CouchDB WebWorkers、Rollup,以及React和Reach-Native等库。
你可以通过使用npx nanoid在终端获得一个唯一的ID。唯一的先决条件是要安装NodeJS。(其他语言也有,单纯从nodejs角度考虑哈)
此外,你也可以在Redux工具包内找到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。
使用建议
根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。
非人类可读是许多开发人员在 NanoID 中看到的主要缺点。但似乎唯一标识类字符都有这个问题:非友好性可读
使调试变得十分困难。
NanoID 比 UUID 更年轻,且从npm趋势对比来看,NanoID的上升趋势更明显,而UUID的进展则很平缓。
因此,基于NanoID 更小、更快、更安全、更不易冲突,个人更推荐使用 NanoID。
写在最后
给大家分享几个Webstorm免费的激活码
为了防止被和谐,需要的小伙伴
微信扫一扫,关注公众号:前端实验室
回复“aaaa8”,获取激活码
本篇文章来源于微信公众号: 前端实验室