<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          生成唯一ID,為什么 NanoID 會取代 UUID?

          共 2565字,需瀏覽 6分鐘

           ·

          2021-10-23 15:53

          UUID[1] 是軟件開發(fā)中最常用的通用標識符之一。然而,在過去幾年中,其他替代品挑戰(zhàn)了它的存在。

          其中,NanoID 是取代 UUID 的主要競爭對手之一。

          因此,在本文中,我將討論 NanoID 的功能、它的亮點以及它的局限性,以便您更好地了解何時使用它。

          了解 NanoID 及其用法

          對于 JavaScript,生成 UUID 或 NanoID 非常簡單,他們都有 NPM 包來幫助你。

          你所需要做的就是用 npm i nanoid 命令安裝NanoID NPM庫,并在你的項目中使用它。

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

          你知道NanoID每周有超過11,754K的NPM下載量,并且比UUID快60%嗎?

          此外,NanoID比UUID年輕近7年,而且它在GitHub上的星級已經超過了UUID。

          下圖顯示了這兩個的npm趨勢比較,我們可以看到NanoID的上升趨勢,而UUID的進展平平。

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

          我希望這些數(shù)字已經說服了你去嘗試NanoID。

          然而,這兩者之間的主要區(qū)別很簡單。

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

          1.NanoID 的大小只有 108 個字節(jié)

          與 UUID 不同,NanoID 的大小要小 4.5 倍,并且沒有任何依賴關系。

          大小減少直接影響數(shù)據的大小。例如,使用 NanoID 的對象小而緊湊,用于數(shù)據傳輸和存儲。隨著應用程序的增長,這些數(shù)字變得可見。

          2.更安全

          在大多數(shù)隨機生成器中,它們使用不安全的 Math.random()。但是,NanoID 使用更安全的 crypto moduleWeb Crypto API

          此外,NanoID 在 ID 生成器的實現(xiàn)過程中使用了自己的稱為統(tǒng)一算法的算法,而不是使用 random % alphabet

          3.它快速而緊湊

          NanoID比UUID快60%。與UUID的36個字符不同,NanoID只有21個字符。

          0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-

          此外,NanoID 支持 14 種不同的編程語言,它們是

          C#, C++, Clojure and ClojureScript, Crystal, Dart & Flutter, Deno, Go, Elixir, Haskell, Janet, Java, Nim, Perl, PHP, Python with dictionaries, Ruby , Rust, Swift

          4.兼容性

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

          你可以通過使用 npx nanoid 在終端獲得一個唯一的ID,唯一的先決條件是要安裝NodeJS。

          此外,你也可以在Redux toolkit[2]內找到NanoID,并將其用于其他使用情況,如下所示。

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

          5.自定義字母

          NanoID 的另一個現(xiàn)有功能是它允許開發(fā)人員使用自定義字母表。您可以更改文字或 id 的大小,如下所示:

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

          在上面的示例中,我將自定義字母表定義為 ABCDEF1234567890,并將 Id 的大小定義為 12。

          6.沒有第三方依賴

          由于 NanoID 不依賴任何第三方依賴,隨著時間的推移,它變得更加穩(wěn)定自治。

          從長遠來看,這有利于優(yōu)化bundle的大小,使其不容易出現(xiàn)依賴關系帶來的問題。

          局限性和未來重點

          根據 StackOverflow 中的許多專家意見,使用 NanoID 沒有明顯的缺點或限制。

          非人類可讀性是許多開發(fā)者認為NanoID的主要缺點,因為它使調試更加困難。但是,與UUID相比,NanoID要短得多,可讀性強。

          另外,如果你使用 NanoID 作為表的主鍵,如果你使用相同的列作為聚集索引也會出現(xiàn)問題,這是因為 NanoID 不是連續(xù)的。

          在未來...

          NanoID 正逐漸成為最流行的 JavaScript 唯一 id 生成器,大多數(shù)開發(fā)人員更喜歡選擇它而不是 UUID。

          Source: https://www.npmjs.com/package/nanoid

          以上基準測試顯示了NanoID與其他主要id生成器相比的性能。

          在使用其默認字母表時,它每秒可生成超過220萬個獨特的ID,在使用自定義字母表時,每秒可生成超過180萬個獨特的ID。

          根據我使用 UUID 和 NanoID 的經驗,考慮到它的小尺寸、URL 友好性、安全性和速度,我建議在任何未來的項目中使用 NanoID 而不是 UUID。

          因此,我邀請你在你的下一個項目中嘗試使用NanoID,并在評論區(qū)與其他人分享你的想法。


          原文:https://blog.bitsrc.io/why-is-nanoid-replacing-uuid-1b5100e62ed2
          作者:Charuka Herath

          參考資料

          [1]

          UUID: https://en.wikipedia.org/wiki/Universally_unique_identifier

          [2]

          Redux toolkit: https://redux-toolkit.js.org/api/other-exports


          瀏覽 163
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  h片在线免费观看视频 | 成人不卡在线 | 色老板视频凹凸精品视频 | 超碰永久在线 | 国产精品国产 |