比UUID更轻量、更安全的工具

简介: 比UUID更轻量、更安全的工具。NanoID,比UUID快60%,将成为UUID的最佳替代品!

前言

唯一标识符是我们项目开发中常常用到的需求。

当碰到这个问题,大部分小伙伴第一时间想到的就是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角度考虑哈)

image.png

此外,你也可以在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。

相关文章
|
6月前
|
存储 缓存 安全
10款轻量型的嵌入式GUI库分享
10款轻量型的嵌入式GUI库分享
500 1
|
5月前
|
NoSQL Redis
TongRDS与Redis数据类型的对比、开发板、标准版、企业版区别
TongRDS与Redis数据类型的对比、开发板、标准版、企业版区别
253 2
|
5月前
|
SQL 关系型数据库 MySQL
|
6月前
|
弹性计算 运维 Kubernetes
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
轻量应用服务器是深受个人和普通企业用户亲耐的一款轻量级云服务器产品,提供精品应用一键部署,支持一站式的域名、网站、安全、运维、应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛。轻量容器服务是专为学生、个人开发者等用户打造的轻量级容器服务,帮助您在云上快速了解容器和Kubernetes(简称K8s)相关的基础概念和轻松进行入门实践。本文为大家介绍一下阿里云轻量应用服务器与轻量容器服务的区别以及收费标准,以供参考。
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
|
6月前
|
存储 NoSQL Redis
Star 3.1k!Tiny RDM 刚上线就收获一众好评的Redis桌面客户端!现代化、轻量级、跨平台!
Star 3.1k!Tiny RDM 刚上线就收获一众好评的Redis桌面客户端!现代化、轻量级、跨平台!
244 1
|
6月前
|
存储 弹性计算 开发框架
ECS和轻量级服务器有什么区别
ECS和轻量级服务器有什么区别
|
机器学习/深度学习 域名解析 弹性计算
轻量级服务器和ecs有什么区别?
轻量级服务器和ecs有什么区别?阿里云轻量应用服务器和云服务器有什么区别?轻量相对于ECS云服务器属于轻量级的云服务器,适合个人开发者或中小企业使用,轻量用来搭建网站应用、测试环境等单机应用,云服务器ECS是专业级云服务器,用来搭建集群类高可用、高容灾应用,科学计算、大数据分析及深度学习等应用
208 0
|
NoSQL MongoDB Redis
一日一技:如何实现一个轻量插件系统
一日一技:如何实现一个轻量插件系统
131 0
一日一技:如何实现一个轻量插件系统
|
机器学习/深度学习 弹性计算 运维
阿里云轻量级服务器和ecs的区别(2023更新)
阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻量应用服务器和云服务器的区别,包括运维区别、镜像系统、使用场景、网络线路等详细说明:
412 0
阿里云轻量级服务器和ecs的区别(2023更新)
|
安全 JavaScript API
生成 UUID 的三种方式及测速对比!
通用唯一识别码(英语:Universally Unique Identifier,缩写:UUID)是用于计算机体系中以识别信息的一个 128 位标识符,通常表现为一串 32 位十六进制数字。