阿里新规:换掉UUID,NanoID更快更安全

阿里新规:换掉UUID,NanoID更快更安全

文章来源:https://c1n.cn/WcAl0

目录

前言

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 的平坦进展有强烈的对比。

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

我希望这些数字已经说服你去尝试 NanoID。但是,这两者之间的主要区别很简单。它归结为键使用的字母表

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

| NanoID 只有 108 个字节那么大

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

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

| 更安全

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

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

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

| 它既快速又紧凑

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。

| 兼容性

它还支持 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’

| 自定义字母

NanoID 的另一个现有功能是它允许开发人员使用自定义字母表,我们可以更改文字或 id 的大小。

如下所示:

import { customAlphabet } from ‘nanoid’; const nanoid = customAlphabet(‘ABCDEF1234567890’, 12); model.id = nanoid();

在上面的示例中,我将自定义字母表定义为 ABCDEF1234567890,并将 Id 的大小定义为 12。

| 没有第三方依赖

由于 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,并在评论部分与其他人分享您的想法。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月21日
下一篇 2022年6月21日

相关推荐

  • “公参民”2年内完成转公办或停办,对民办学校影响大吗?

    转为公办或转为民办或停办,这是公参民学校的三种路径。截止2022年12月份之前要全部完成转型,对民办学校的影响还是比较大的,对义务教育阶段影响比较大对高中阶段影响有但不至于影响高中…

    2022年4月20日
  • 许家印失去足球场,郜林卖汇悦台豪宅,一个时代结束

    两年前的4月,拿地当天,恒大的推土机,开进了广州番禺那片土地。 开工仪式上,站在台上的,是如日中天的许老板,以及名帅卡纳瓦罗、国脚郑智。 按照当时的宣言,这座超级足球场,2022年…

    2022年8月6日
  • 难产的FF91,是中国电动车的“成功之母”?

    前几年还停留在车企高管口中的大趋势,现在变成了真得不能再真的事实,以电能驱动为主的新能源车,已是汽车市场最重要同时增长速度也最快的部分。在2022年7月,正式停产燃油车数个月的比亚…

    2022年8月7日
  • 中概股再掀暴涨,美指狂跌的情况下,为什么中概股一枝独秀?

    隔夜美股中概股再一次集体暴涨,以阿里为龙头,中概股自从5月份以来持续上涨,逆流而上,成为了美股为数不多的赚钱股。 从日线的多空趋势线来看,阿里等中概股已经全面转多。我在5月份曾提示…

    2022年6月28日
  • 金融街:处置酒店资产获利7.8亿,三道红线仍踩两道

    2022年上半年,为控制债务规模,金融街出售了北京酒店资产,获利达7.8亿元,带动了企业盈利规模的大幅增长,但尽管如此,企业的负债结构依旧没有太大改善,三道红线指标仍位于橙档,不过…

    2022年8月26日
  • 广州车展SUV“争相绽放”,谁最可能复制“探岳式”成功?

    「探岳式成功」需要厚颜无耻即可近期广州车展可谓看点多多,参展车辆共计1020辆、首发新车54辆、概念车28辆,主体以中国汽车品牌的新能源汽车为主、燃油车为辅,合资汽车的展台基本是门…

    2022年7月24日
  • 村里二舅,阿里张勇

    文三娘在此 随着马老师退隐江湖,掌舵阿里数年的张勇,正在从最敬业的职业经理人,开始寻找通往企业精神领袖的征途。 今天阿里发布了其2022财年年报。在一年一度的致股东信中,阿里巴巴集…

    2022年7月27日
  • 云游戏再起“风波”!5大底部爆发龙头,未来有望翻倍

    “网络游戏”行业现状 游戏方面随口罩红利褪去,顺应上面严监管环境推动行业改革,把握口罩时代及Z时代带来的创新需求,预计VR内容生态建设将成为2022年市场关注重点。 游戏多端并发渐…

    2022年7月1日
  • 宇宙大得令人难以置信

    可观测宇宙的直径为920亿光年,对我们来说这只是一串数字,今天小编用图片展示它的大小。 大爆炸或许产生一系列宇宙,每个宇宙都好似一个“气泡”,大约138亿年前,这些“气泡”中的一个…

    2022年8月16日
  • Fastadmin CMS伪静态时面包屑导航网址不正确的应急处理

    这个fastadmin cms项目伪静态的规则是一级栏目对应两级目录,即如栏目自定义URL名称为“abc”,那么内容页123默认的伪静态是路径是“/abc/123”,而这个项目的自…

    2022年6月20日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息