UUID 是软件开发中最常用的通用标识符之一。然而,在过去的几年里,其他的竞品挑战了它的存在。

其中,NanoID 是 UUID 的主要竞争对手之一。

因此,在本文中,我们将展开讨论 NanoID 的功能、它的亮点以及它的局限性,以便让我们更好地了解何时使用它。

了解 NanoID 及其用法

对于 JavaScript,生成 UUID 或 NanoID 都非常简单。它们都有对应的 NPM 包来帮助我们实现生成。

我们所需要做的就是运行 npm i nanoid 命令安装 NanoID NPM 库 并在我们的项目中使用它:

import { nanoid } from 'nanoid';
model.id = nanoid();

“你是否知道 NanoID 每周的 NPM 下载量超过 1175.4 万,并且运行起来比 UUID 快 60%?”

此外,NanoID 比 UUID 年轻了将近 7 年,而且它的 GitHub 星数已经比 UUID 多。

下图显示了这两个之间的 npm 趋势比较,我们可以看到 NanoID 的上升趋势与 UUID 的平坦进展有强烈的对比。

image.png

https://www.npmtrends.com/nanoid-vs-uuid

我希望这些数字已经说服你去尝试 NanoID。

但是,这两者之间的主要区别很简单。它归结为键使用的字母表。

由于 NanoID 使用比 UUID 更大的字母表,因此较短的 ID 可以用于与较长的 UUID 相同的目的。

1. NanoID 只有 108 个字节那么大

与 UUID 不同,NanoID 的大小要小 4.5 倍,并且没有任何依赖关系。此外,大小限制已用于将大小从另外 35% 减小。

大小减少直接影响数据的大小。例如,使用 NanoID 的对象小而紧凑,能够用于数据传输和存储。随着应用程序的增长,这些数字变得明显起来。

2. 更安全

在大多数随机生成器中,它们使用不安全的 Math.random()。但是,NanoID 使用 crypto moduleWeb Crypto API,意味着 NanoID 更安全。

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

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。

3. 它既快速又紧凑

NanoID 比 UUID 快 60%。与 UUID 字母表中的 36 个字符不同,NanoID 只有 21 个字符。

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-

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

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

4. 兼容性

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

我们可以使用 npx nanoid 在终端中获得唯一 ID。在 JavaScript 中使用 NanoID 唯一的要求是要先安装 NodeJS。

图片

此外,我们还可以在 Redux toolkit 中找到 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 作为表的主键,如果你使用相同的列作为聚集索引也会出现问题。这是因为 NanoID 不是连续的。

在将来……

NanoID 正逐渐成为 JavaScript 最受欢迎的唯一 id 生成器,大多数开发人员更喜欢选择它而不是更喜欢 UUID。

图片

来源:https://www.npmjs.com/package/nanoid

上述基准测试显示了 NanoID 与其他主要 id 生成器相比的性能。

使用默认字母表每秒可生成超过 220 万个唯一 ID,使用自定义字母表每秒可生成超过 180 万个唯一 ID。

根据我使用 UUID 和 NanoID 的经验,考虑到它的小尺寸、URL 友好性、安全性和速度,我建议在任何未来的项目中使用 NanoID 而不是 UUID。

因此,我邀请您在下一个项目中试用 NanoID,并在评论部分与其他人分享您的想法。

原文地址:Why is NanoID Replacing UUID? 原文作者:Charuka Herath 译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/gold-miner/blob/master/article/2021/why-is-nanoid-replacing-uuid.md 译者:霜羽 Hoarfroster

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!

推荐阅读

  • 日本网友求助如何卸载360浏览器,过程堪比“ 拆弹 ”...

  • Redis 官方可视化工具,功能强大、干净又卫生!

  • 一文搞定Nginx的安装与高可用配置

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书、创过业、国企4年互联网6年。10年前毕业加入宇宙行,工资不高、也不算太忙,业余坚持研究技术和做自己想做的东西。4年后离开国企,加入永辉互联网板块的创业团队,从开发、到架构、到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

点击阅读原文,领取2022最新10000T学习资料

NanoID 了解一下?比 UUID 更好用!相关推荐

  1. 比UUID更快更安全NanoID到底是怎么实现的?(荣耀典藏版)

    前言 UUID 是软件开发中最常用的通用标识符之一.然而,在过去的几年里,其他的竞品挑战了它的存在. 其中,NanoID 是 UUID 的主要竞争对手之一. 因此,在本文中,我们将展开讨论 NanoI ...

  2. ULID - 一种比UUID更好的方案

    ULID:Universally Unique Lexicographically Sortable Identifier(通用唯一词典分类标识符) UUID:Universally Unique I ...

  3. UUID正在被NanoID取代?

    欢迎关注方志朋的博客,回复"666"获面试宝典 UUID 是软件开发中最常用的通用标识符之一.然而,在过去的几年里,其他的竞品挑战了它的存在. 其中,NanoID 是 UUID 的 ...

  4. UUID 正在被 NanoID 取代?

    原文地址:Why is NanoID Replacing UUID? 原文作者:Charuka Herath 译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/go ...

  5. 换掉 UUID,更快更安全!

    UUID 是软件开发中最常用的通用标识符之一.然而,在过去的几年里,其他的竞品挑战了它的存在. 其中,NanoID 是 UUID 的主要竞争对手之一. 因此,在本文中,我们将展开讨论 NanoID 的 ...

  6. 为什么 NanoID 会取代 UUID

    大家好,我是老赵! UUID 是软件开发中最常用的通用标识符之一.然而,在过去的几年里,其他的竞品挑战了它的存在. 其中,NanoID 是 UUID 的主要竞争对手之一. 因此,在本文中,我们将展开讨 ...

  7. nanoid js字符串id生成器

    优点:比uuid更轻量 js库 安装:npm i nanoid -S 或 yarn add nanoid 使用: 第一步 引入 import 'nanoid' from 'nanoid' 第二步 调用 ...

  8. PostgreSQL中UUID的完整指南

    目录 理解SQL中的键 自然键与代理键 使用PostgreSQL创建主键的语法 创建复合主键 通用唯一ID?UUID介绍 UUID_v4与UUID_V1 使用uuid-osp创建UUID主键-Post ...

  9. 【学习笔记】React.js

    视频地址 https://www.bilibili.com/video/BV1wy4y1D7JT 入门 React是什么 使用 React 框架的程序,展现页面需要分三步: 发送请求获取数据 处理数据 ...

最新文章

  1. 网曝某互联网大厂给员工电脑安装插件,基本等于全程监控!网友:就是监控你们划水!...
  2. php运行cpu利用率低,PHP-如何减低php程序的cpu使用率?
  3. vue-cli3项目更改favicon图标
  4. LeetCode题库第867题 转置矩阵
  5. android edittext 不滚动,EditText 设置可以垂直滑动但是不可输入
  6. 底量超顶量超级大黑马指标源码_一旦出现底量超顶量形态,是超级大黑马诞生!...
  7. 哈希表和红黑树的对比
  8. 超简单!Vue 短信验证码组件开发详解
  9. OpenCC繁体文章转换成简体字
  10. phpstrom 安装
  11. restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
  12. L298N模块驱动电机(实现pwm调速)
  13. 神奇的数字之回文数c语言,奇妙的数字
  14. 推荐 5 款良心网盘,免费、空间大、不限速!
  15. A Survey on Conversational Recommender Systems
  16. R语言符号秩检验及其应用
  17. Android使用GoogleMap实现定位与路径检索功能
  18. python pandas 分割DataFrame中的字符串及元组
  19. Fiddler过滤器设置--屏蔽不需要分析的文件
  20. 【 网络带宽 】MBps Mbps

热门文章

  1. ActiveMQ入门教程(三) - ActiveMQ P2P版的HelloWorld
  2. How to enable javascript in windows server 2008 R2 enterprise
  3. ASP.NET Web Services Tutorial
  4. SilverLight学习笔记--建立Silverlight自定义控件(5)--绑定动画效果
  5. ISA系列之ISA Server 2004 中的新增功能--利用多个网络
  6. linux zabbix_agentd命令 监控服务器参数 简介
  7. java struts2 安全漏洞 devMode 简介
  8. pycharm ctrl+s ctrl+alt+shift+x 同步上传代码到服务器
  9. python3 字符串大小写转换
  10. 挖矿木马的战略战术分析