0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UUID正在被NanoID取代?

Android编程精选 来源:Android编程精选 作者:Android编程精选 2022-04-02 14:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

e378c2ee-b233-11ec-aa7f-dac502259ad0.png

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 module和Web 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。

e39d5a14-b233-11ec-aa7f-dac502259ad0.png

image.png

此外,我们还可以在 Redux toolkit 中找到 NanoID,并将其用于其他用例,如下所示;

import{nanoid}from‘@reduxjs/toolkit’ console.log(nanoid())//‘dgPXxUz_6fWIQBD8XmiSy’

5. 自定义字母

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

import{customAlphabet}from'nanoid'; constnanoid=customAlphabet('ABCDEF1234567890',12); model.id=nanoid();

在上面的示例中,我将自定义字母表定义为ABCDEF1234567890,并将 Id 的大小定义为 12。另外,搜索公众号互联网架构师后台回复“面试”,获取一份惊喜礼包。

6. 没有第三方依赖

由于 NanoID 不依赖任何第三方依赖,随着时间的推移,它能够变得更加稳定自治。 从长远来看,这有利于优化包的大小,并使其不太容易出现依赖项带来的问题。

局限性和未来重点

根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。 非人类可读是许多开发人员在 NanoID 中看到的主要缺点,因为它使调试变得更加困难。但是,与 UUID 相比,NanoID 更短且可读。 另外,如果你使用 NanoID 作为表的主键,如果你使用相同的列作为聚集索引也会出现问题。这是因为 NanoID 不是连续的。

在将来……

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

e3aadd10-b233-11ec-aa7f-dac502259ad0.png

来源:https://www.npmjs.com/package/nanoid 上述基准测试显示了 NanoID 与其他主要 id 生成器相比的性能。

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

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

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件开发
    +关注

    关注

    0

    文章

    673

    浏览量

    29865
  • UUID
    +关注

    关注

    0

    文章

    23

    浏览量

    8537

原文标题:UUID正在被NanoID取代?

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AI接手,微博正在重写广告的传播逻辑

    正在被AI改写为品牌与用户对话的起点。 微博通过AI原生评论、智能评论引导、微博商搜话题词、视频语义套装等广告产品,分别切入评论、话题与视频三大核心场景,为品牌打开了传播的“后半场”。 它的目标很明确:让广告不止于被
    的头像 发表于 11-21 10:03 200次阅读
    AI接手,微博<b class='flag-5'>正在</b>重写广告的传播逻辑

    在修改广播内容(如名称、UUID、广播数据等)时是否需要停用当前广播功能

    在修改广播内容(如名称、UUID、广播数据等)时, 通常需要先停止当前广播,修改参数后再重新启动广播 ,才能确保新配置生效且功能稳定。具体逻辑如下: 1. 主流蓝牙芯片的操作流程(以 NORDIC
    发表于 10-31 13:01

    NORDIC蓝牙芯片修改广播内容(如名称、MAC 地址、UUID 等)后是否需要重启才能生效

    蓝牙芯片修改广播内容(如名称、MAC 地址、UUID 等)后是否需要重启才能生效,取决于芯片的硬件设计、固件实现以及具体修改的参数类型,不能一概而论。以下是常见情况的分析: 1. 大部分广播参数
    发表于 10-31 12:57

    自动驾驶中Transformer大模型会取代深度学习吗?

    [首发于智驾最前沿微信公众号]近年来,随着ChatGPT、Claude、文心一言等大语言模型在生成文本、对话交互等领域的惊艳表现,“Transformer架构是否正在取代传统深度学习”这一话题一直被
    的头像 发表于 08-13 09:15 3919次阅读
    自动驾驶中Transformer大模型会<b class='flag-5'>取代</b>深度学习吗?

    MEMS陀螺仪正在取代光纤陀螺仪?

    一、微型科技巨匠:MEMS陀螺仪揭秘 何谓MEMS? MEMS(微机电系统)是融合了微电子与微机械的神奇技术。它能在指甲盖大小的硅芯片上集成复杂的传感器、执行器和处理电路,实现微观世界的数据感知、处理与输出。 MEMS陀螺如何“感知”旋转? 别被名字迷惑!现代MEMS陀螺仪并非依靠传统陀螺的旋转飞轮。其核心原理是科里奥利力。想象一下: 芯片内部有微小的振动质量块(“驱动”方向振动)。 当整个器件发生旋转时,振动质量块会受到一个垂直方
    的头像 发表于 07-08 16:45 636次阅读

    2025年仓储革命:不用RFID数据采集器的企业正在被淘汰!

    在2025年,仓储领域正经历着一场前所未有的革命。随着科技的飞速发展,RFID(射频识别)技术已成为仓储管理变革的核心驱动力,那些尚未采用RFID数据采集器的企业,正面临着被市场淘汰的严峻挑战。传统仓储管理模式主要依靠人工盘点和条码扫描,效率低下且容易出错。据统计,制造业因仓储管理缺陷造成的年损失高达营收的3%-5%。而RFID技术的出现,彻底改变了这一局面
    的头像 发表于 07-07 15:43 547次阅读
    2025年仓储革命:不用RFID数据采集器的企业<b class='flag-5'>正在被</b>淘汰!

    传统的芯片设计,正在被颠覆

    几十年来,半导体开发一直遵循着24至36个月的稳定设计开发周期。虽然这种模式在计算需求较低且创新速度更易于管理的情况下运作良好,但人工智能却创造了一套新的规则。人工智能的飞速发展正在迅速超越当前芯片
    的头像 发表于 06-27 12:38 726次阅读
    传统的芯片设计,<b class='flag-5'>正在被</b>颠覆

    蓝牙UUID:无线通信中的唯一标识符

    一、蓝牙UUID:1、我们将从机具有的数据或者属性特征,称之为从机中添加(profile配置文件),作为profile包含一个或者多个服务,每个服务又包含一个或者多个特征。每个特征值都有自己的属性
    的头像 发表于 03-25 16:48 889次阅读
    蓝牙<b class='flag-5'>UUID</b>:无线通信中的唯一标识符

    这些岗位正在被复合机器人取代

    机器人
    fuweizn
    发布于 :2025年03月04日 14:54:52

    想要用一个蓝牙模块与 DLP NIRscan Nano连接,怎么知道哪一个UUID才是该设备蓝牙连接的UUID?

    DLP NIRscan Nano用户指南里边给了很多UUID,我现在想要用一个蓝牙模块与 DLP NIRscan Nano连接,但是没弄明白哪一个UUID才是该设备蓝牙连接的UUID?谢谢!
    发表于 03-03 07:19

    Techwiz LCD 1D案例:宾主效应液晶模式

    二色性染料分子的运动取决于入射光的偏振。在包括透明显示器和智能窗口在内的各个显示领域,宾主效应设备正在被广泛研究。 (a)具有二向色性材料的液晶盒结构 (b)具有和没有二向色性材料的透射率差异
    发表于 02-07 08:57

    简单认识AMQP通信协议

    在工业4.0、物联网、智能工厂和智能设备构建的未来蓝图中,跨层级的连接扮演着核心角色。我们正见证着一场变革:传统的、分层的自动化金字塔结构正在被一种更大、更全面的网络结构所取代。在这种新结构中,各个节点不仅相互连接,还实时交换数据,共同编织出智能化的网络。
    的头像 发表于 01-10 18:05 1340次阅读
    简单认识AMQP通信协议

    KT6368A蓝牙芯片的uuid完整的是多少,以及app或者小程序开发的注意点

    目前KT6368A蓝牙双模芯片用的是16位的uuid,当然这个uuid或者特征值有很多种 16位的uuid是最简单的一种,如下图所示,当然网上随便搜搜也有很多的介绍,想了解也可以搜搜
    的头像 发表于 12-29 09:46 1150次阅读
    KT6368A蓝牙芯片的<b class='flag-5'>uuid</b>完整的是多少,以及app或者小程序开发的注意点

    ADS1278在灵敏度上是否可以取代ADS1282芯片?

    公司在做地震检测仪器,不知道ADS1278在灵敏度上是否可以取代ADS1282芯片?
    发表于 12-16 07:02

    Techwiz LCD 1D:宾主效应液晶模式

    二色性染料分子的运动取决于入射光的偏振。在包括透明显示器和智能窗口在内的各个显示领域,宾主效应设备正在被广泛研究。 (a)具有二向色性材料的液晶盒结构 (b)具有和没有二向色性材料的透射率差异
    发表于 12-11 11:42