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

    文章

    614

    浏览量

    27364
  • UUID
    +关注

    关注

    0

    文章

    22

    浏览量

    8128

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    陶瓷电容取代LDO中的钽电容

    电子发烧友网站提供《陶瓷电容取代LDO中的钽电容.pdf》资料免费下载
    发表于 10-11 09:28 0次下载
    陶瓷电容<b class='flag-5'>取代</b>LDO中的钽电容

    芯片行业,正在被改写

    个性化和以软件为中心的体验。对于许多行业专家来说,半导体行业显然正在经历一场大规模的转型,其客户要求各个行业都进行变革。在这个复杂的领域,出现了一个新的机遇——半
    的头像 发表于 08-09 08:28 270次阅读
    芯片行业,<b class='flag-5'>正在被</b>改写

    CPU,正在被AI时代抛弃?

    大模型生态要想持续不断地往前演进,无疑要靠一个个实打实的小业务落地把整个生态构建起来,英特尔联合千帆大模型平台正是在帮助企业以最少的成本落地大模型应用,让他们在探索大模型应用时找到了更具效价比的选项。
    的头像 发表于 07-11 17:14 250次阅读
    CPU,<b class='flag-5'>正在被</b>AI时代抛弃?

    ESP32如何获取到要连接的蓝牙uuid

    我现在使用esp32 wroom 32 烧写了 例程里面的gatt_client 但是我搜索到周边的蓝牙并且连接上,获取不到 对方的uuid 如何 获取到要连接的蓝牙uuid 我看例程里面是写死
    发表于 06-24 09:12

    求助,ble_spp_server demo为什么修改不了UUID

    /// SPP Service static const uint16_t spp_service_uuid = 0xFFE0; /// Characteristic UUID #define
    发表于 06-24 07:28

    ESP32-C3私有服务的UUID设置为128bit UUID会报错怎么解决?

    esp-idfexamplesbluetoothbluedroidblegatt_server_service_table的DEMO上修改16bit 的私有服务UUID为128bit的UUID,但改完后烧录的串口信息会报错,ble调试软件可以连接上蓝牙但是看不到该服务,我
    发表于 06-20 08:19

    esp32在VSCode ESP-IDF的示例程序中如何更改默认的128bit的UUID

    esp32在VSCode ESP-IDF中的示例程序中如何更改默认的128bit的UUID
    发表于 06-07 08:27

    在SimpleCentral_processGATTDiscEvent里面,根据UUID发现charHandle,这个charHandle在UUID改为128bit后是否还是保存为8字节?

    使用CC2652R7作为BLE主机,在例程simple_central的基础上修改读写数据的UUID为128 bit。有三个问题想要请教一下:1、在
    发表于 05-30 07:55

    在被超60亿美元收购后,日本光刻胶巨头JSR寻求扩大规模

    在被超60亿美元收购后,日本光刻胶巨头JSR积极寻求扩大规模,以适应全球芯片制造行业的快速发展。
    的头像 发表于 04-29 14:37 749次阅读

    EDA再掀热潮,中国积极投身其中成为重要参与者

    CPU正在被异构计算所取代,我们看到云成为 CPU、GPU、AI 处理器、定制加速器、FPGA 等的混合体。其中许多新处理器是由初创公司开发的,这对于提高不同类别计算的效率至关重要。
    发表于 04-17 14:14 539次阅读

    请问CYBLE-214009-00支持支持改uuid吗?

    如题所述: CYBLE-214009-00支持支持改uuid吗? 另外我可以在哪里找到CYBLE-214009-00的指令集 Does CYBLE-214009-00 support uuid?
    发表于 02-21 06:18

    求助,是否可以动态修改蓝牙Service和Characteristic的UUID

    可以通过软件接口动态修改蓝牙Service和Characteristic的UUID吗? PSoC6,PSoC Creator,PDL3.1.2
    发表于 02-18 07:05

    铜缆会被光纤完全取代吗?为什么光纤目前取代不了铜缆?

    铜缆会被光纤完全取代吗?为什么光纤目前取代不了铜缆? 随着科技的进步和互联网的迅猛发展,数字通信技术也取得了巨大的突破。铜缆作为传统的网络连接媒介,在过去几十年里扮演了重要的角色,但随着光纤技术
    的头像 发表于 02-04 10:25 1225次阅读

    英伟达新的AI芯片正在被全球疯抢

    “服务器和存储系统组件市场预计 2023 年全年将增长 11%,这主要是由加速器推动的。Dell'Oro 的 Baron Fung 表示,不包括加速器,预计收入将下降 27%,原因是系统供应商和超大规模云服务提供商针对通用计算的库存调整导致需求减少。
    发表于 01-03 16:49 468次阅读
    英伟达新的AI芯片<b class='flag-5'>正在被</b>全球疯抢