生成唯一ID,為什麼 NanoID 會取代 UUID?
UUID [1] 是軟件開發中最常用的通用標識符之一。然而,在過去幾年中,其他替代品挑戰了它的存在。
其中,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的進展平平。
我希望這些數字已經説服了你去嘗試NanoID。
然而,這兩者之間的主要區別很簡單。
由於 NanoID 使用比 UUID 更大的字母表,因此較短的 ID 可以用於與較長的 UUID 相同的目的。
1.NanoID 的大小隻有 108 個字節
與 UUID 不同,NanoID 的大小要小 4.5 倍,並且沒有任何依賴關係。
大小減少直接影響數據的大小。例如,使用 NanoID 的對象小而緊湊,用於數據傳輸和存儲。隨着應用程序的增長,這些數字變得可見。
2.更安全
在大多數隨機生成器中,它們使用不安全的 Math.random()
。但是,NanoID 使用更安全的 crypto module
和 Web Crypto API
。
此外,NanoID 在 ID 生成器的實現過程中使用了自己的稱為統一算法的算法,而不是使用 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 的另一個現有功能是它允許開發人員使用自定義字母表。您可以更改文字或 id 的大小,如下所示:
import { customAlphabet } from 'nanoid'; const nanoid = customAlphabet('ABCDEF1234567890', 12); model.id = nanoid();
在上面的示例中,我將自定義字母表定義為 ABCDEF1234567890
,並將 Id 的大小定義為 12。
6.沒有第三方依賴
由於 NanoID 不依賴任何第三方依賴,隨着時間的推移,它變得更加穩定自治。
從長遠來看,這有利於優化bundle的大小,使其不容易出現依賴關係帶來的問題。
侷限性和未來重點
根據 StackOverflow 中的許多專家意見,使用 NanoID 沒有明顯的缺點或限制。
非人類可讀性是許多開發者認為NanoID的主要缺點,因為它使調試更加困難。但是,與UUID相比,NanoID要短得多,可讀性強。
另外,如果你使用 NanoID 作為表的主鍵,如果你使用相同的列作為聚集索引也會出現問題,這是因為 NanoID 不是連續的。
在未來...
NanoID 正逐漸成為最流行的 JavaScript 唯一 id 生成器,大多數開發人員更喜歡選擇它而不是 UUID。
以上基準測試顯示了NanoID與其他主要id生成器相比的性能。
在使用其默認字母表時,它每秒可生成超過220萬個獨特的ID,在使用自定義字母表時,每秒可生成超過180萬個獨特的ID。
根據我使用 UUID 和 NanoID 的經驗,考慮到它的小尺寸、URL 友好性、安全性和速度,我建議在任何未來的項目中使用 NanoID 而不是 UUID。
因此,我邀請你在你的下一個項目中嘗試使用NanoID,並在評論區與其他人分享你的想法。
原文:http://blog.bitsrc.io/why-is-nanoid-replacing-uuid-1b5100e62ed2
作者:Charuka Herath
參考資料
UUID: http://en.wikipedia.org/wiki/Universally_unique_identifier
Redux toolkit: http://redux-toolkit.js.org/api/other-exports
- 像專業人員一樣驗證你的Vue Props
- 如何在用户離開頁面時可靠地發送 HTTP 請求
- 將自定義 GitHub 徽章添加到您的代碼庫
- 使用 web-vitals 監控 web app 的性能
- 真沒必要再對 axios 進行過度的封裝
- 你應該知道的 7 個 GitHub 功能
- 集美美圖APP 2.0.0 版本上線了
- 你的應用應該如何收費?它的價值是什麼?
- xgplayer.js 西瓜播放器 - 字節跳動團隊出品的免費開源 HTML5 視頻播放組件,內置解析器、也能節省流量
- 2天,我把 TS 的事件循環模型、服務端、模擬登陸擼乾淨了!
- 8 個令人驚歎的 Vue.js UI 組件,説不定用得上!
- Vue.js Astro 比 Vue SPA 更好嗎?
- 使用 node-config 在 Node.js 中創建配置文件
- 2022年全棧開發者需要具備的六項技能
- 使用 Chrome Web 藍牙 API 構建藍牙應用
- 生成唯一ID,為什麼 NanoID 會取代 UUID?
- 在 Flutter 中更快地加載圖像資源!
- Clio lang 簡介:輕鬆交付性能關鍵型 JS
- 20個你應該瞭解的Flutter庫
- 厭倦了 VS Code?試試 Lite-XL吧