从现在开始用 NanoID 会取代UUID

简介: 如果你的项目有生成唯一 key 或者使用 uuid 的场合,那么从现在开始,请使用 NanoID。之前在文章《分享8个可以提高开发效率的JavaScript库》介绍过 NanoID 。NanoID 是一个创建唯一 key 的轻量级的脚本库,在过去有类似需求首先想到的是 uuid ,与其相比 NanoID 要小得多。

如果你的项目有生成唯一 key 或者使用 uuid 的场合,那么从现在开始,请使用 NanoID。之前在文章《分享8个可以提高开发效率的JavaScript库》介绍过 NanoID 。NanoID 是一个创建唯一 key 的轻量级的脚本库,在过去有类似需求首先想到的是 uuid ,与其相比 NanoID 要小得多。

const { nanoid } = require("nanoid");
const key = nanoid();
console.log(key); // U6XRwZsfcDuexQ7m55qdy

从 npmjs.com 信息来看,NanoID 一周的下载量达到上千万,此外,NanoID 比 UUID 小了将近 7 岁,而且它的 GitHub 星数已经超过 UUID 了。下图是两个脚本库的趋势数据图:

image.png

查看网站数据可以点击这里:www.npmtrends.com/nanoid-vs-u…

从上面的数据已经足以说明问题了,下面介绍一下 NanoID 的特点。

体积小

和 UUID 相比,NanoID 的大小要小大概 4.5 倍,压缩大小只有 108 字节,并且没有任何依赖关系。

更安全

在大部分随机生成器使用的是不安全的随机数 Math.random()。而 NanoID 使用 crypto module

此外,NanoID 在 ID 生成器的实现过程中使用了自己的称为统一算法的算法,而不是使用随机的字母表。

更高效

NanoID 比 UUID 快 60%,UUID 的字符表使用 36 个不同字符,而 NanoID 只使用了 21 个字符。

此外,NanoID 还支持 14 种不同的编程语言,它们分别是:

C#、C++、Clojure 和 ClojureScript、Crystal、Dart & Flutter、Deno、Go、Elixir、Haskell、Janet、Java、Nim、Perl、PHP、带字典的 Python、Ruby、Rust、Swift

兼容性

NanoID 还支持 PouchDB、CouchDB WebWorkers、Rollup 以及 React 和 Reach-Native 等库。

灵活性

NanoID 的另一个特点是灵活性,它允许开发人员使用自定义字母表。可以更改文字或 id 的大小,如下所示:

const { customAlphabet } = require("nanoid");
const nanoid = customAlphabet("devpointDEV123456789", 6);
const nid = nanoid();
console.log(nid); // 4it6tp

局限性

根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。

可读性方面(不便于记忆)应该算是 NanoID 的主要缺点,另外,NanoID 不是连续的,因此不能作为数据库表的主键。

总结

NanoID正逐渐成为Javascript中最流行的唯一id生成器,大多数开发人员更愿意选择它而不是 UUID 。在考虑到它的体积小、URL 友好性、安全性和高效,因此建议从现在开始在项目中使用 NanoID 取代UUID 。


相关文章
|
SQL 存储 监控
实用技巧:排查数据异常/数据波动问题,该如何下手?
在我做开发的这些年,让我很头痛的一类问题,不是线上故障,而是数据异常,不知道有没有程序员跟我感同身受。大多数的服务故障都有较为直观的异常日志,再结合产品表象,相对排查起来还有迹可循,但数据异常的原因就太多了,很多时候连报错日志都没有,排查起来简直无从下手。
实用技巧:排查数据异常/数据波动问题,该如何下手?
|
Ubuntu Python 文字识别
OCRmypdf安装部署深入详解
OCRmyPDF使用最好的可用开源OCR引擎Tesseract执行OCR。 OCRmyPDF是一个Python 3包,将OCR图层处理结果添加到PDF。 OCRmyPDF是功能最丰富且经过彻底测试的OCR PDF转换工具。
3252 0
OCRmypdf安装部署深入详解
|
3月前
|
人工智能 视频直播 数据库
2025最新AI智能体学习路线图
零基础入门AI智能体?「智能体来了」为你梳理从技能学习到商业变现的完整路径:涵盖Coze平台开发、Python基础、全平台实战、短视频引流、直播变现实操,助你打造产品+流量+成交闭环,边学边做,快速上手AI智能体商业化应用。
|
5月前
|
人工智能 数据可视化 数据挖掘
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
本文深入分析了传统手动日报在数据孤岛、格式混乱和时效性差三大痛点,并探讨了自动化日报带来的效率提升、决策优化等四大核心价值。通过对板栗看板、SmartBrief、n8n 等六款主流工具的功能、适用场景及实战效果进行测评,为企业提供科学的选型建议与实施路径。
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
|
9月前
|
安全 Ubuntu 网络安全
本地服务器 Odoo 安装指南,并实现公网访问
本指南详细介绍基于 Odoo 的企业应用部署流程。首先通过 VMware 安装虚拟机并配置 Ubuntu 系统,为运行环境打下基础;接着利用 Websoft9 平台简化中间件与 Odoo 服务的安装,实现快速部署与版本管理;然后借助 cpolar 实现内网穿透并完成域名解析,确保公网访问畅通;最后进行功能测试与性能优化,提供运维建议以保障系统稳定性和安全性。适合初学者及中小型企业参考实施。
1065 4
|
缓存 JavaScript 测试技术
如何在Node.js里实现依赖注入
如何在Node.js里实现依赖注入
|
存储 数据挖掘 Linux
在Linux中,LVM(逻辑卷管理)的主要优势是什么?如何扩展LVM卷?
在Linux中,LVM(逻辑卷管理)的主要优势是什么?如何扩展LVM卷?
|
SQL 物联网 数据处理
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
|
SQL JavaScript Java
mybatis-flex入门体验(一)
`shigen`,一个专注于Java、Python、Vue和Shell的博主,分享成长和认知。近期探索了`mybatis-flex`,通过官网学习了代码生成和编码体验。配置数据源和依赖后,利用示例代码生成了符合Lombok+MyBatis Plus规范的实体和Mapper。此外,展示了如何配置SQL打印,并用测试代码演示了查询、多条件查询和更新操作。`mybatis-flex`的亮点在于流畅的查询语法和连表查询功能。后续将分享更多关于连表查询的实践。一起学习,每天进步!
405 0
mybatis-flex入门体验(一)
|
机器学习/深度学习 Rust 资源调度
Rust机器学习之Plotters
本文是“Rust替代Python进行机器学习”系列文章的第四篇,带领大家学习如何用Plotters作图。
1698 0
Rust机器学习之Plotters