為什么 NanoID 正在取代 UUID?
大廠技術(shù)??高級(jí)前端??Node進(jìn)階
點(diǎn)擊上方?程序員成長(zhǎng)指北,關(guān)注公眾號(hào)
回復(fù)1,加入高級(jí)Node交流群
UUID是軟件開發(fā)中最常用的通用唯一識(shí)別碼。然而,在過去幾年中,其他替代方案對(duì)其提出了挑戰(zhàn)。其中,NanoID是UUID的主要競(jìng)爭(zhēng)對(duì)手之一。因此,在本文中,將討論NanoID的特點(diǎn)、它的亮點(diǎn)以及它的局限性,以便更好地理解他和使用它。
了解NanoID及其用法
JavaScript中,生成UUID或NanoID都非常簡(jiǎn)單。都有NPM軟件包。我們只需使用NPM i NanoID命令安裝NanoID NPM庫(kù),就能項(xiàng)目中使用它。
import?{?nanoid?}?from?'nanoid';
model.id?=?nanoid();
NanoID每周NPM下載量超過11754K,而且速度比UUID快60%, 此外,NanoID比UUID年輕近7歲,但是它的GitHub star已經(jīng)比UUID多。下圖顯示了這兩個(gè)項(xiàng)目之間的npm趨勢(shì)比較,我們可以看到與UUID的平穩(wěn)進(jìn)展相比,NanoID的上升趨勢(shì)。

1.NanoID的大小只有108字節(jié)
與UUID不同,NanoID的大小比UUID小4.5倍,并且沒有任何依賴性。這直接影響數(shù)據(jù)的大小。例如,使用NanoID的對(duì)象對(duì)于數(shù)據(jù)傳輸和存儲(chǔ)來說既小又緊湊。隨著程序的增長(zhǎng),這些特點(diǎn)將變得顯而易見。
2.更安全
在大多數(shù)隨機(jī)生成器中,它們使用不安全的Math.random()。但是,NanoID使用更安全的crypto module和?Web Crypto API。此外,NanoID在ID生成器的實(shí)現(xiàn)過程中使用了自己的算法,稱為uniform algorithm,而不是使用random % alphabet.
3.速度快,結(jié)構(gòu)緊湊
NanoID比UUID快60%。在UUID的字母表里有36個(gè)字符,而NanoID只有21個(gè)字符。
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-
此外,NanoID支持14種不同的編程語(yǔ)言,
C#,?C++,?Clojure?and?ClojureScript,?Crystal,?Dart?&?Flutter,?Deno,?Go,?Elixir,?Haskell,?Janet,?Java,?Nim,?Perl,?PHP,?Python?with?dictionaries,?Ruby?,?Rust,?Swift
4.兼容性
它還支持PockDB、CouchDB WebWorkers、Rollup以及React和Reach Native等庫(kù)。我們可以使用npx nanoid在終端中獲得唯一的ID。唯一的先決條件是安裝NodeJS。(其他語(yǔ)言也能,此處只從nodejs角度考慮)

此外,您還可以在Redux工具箱中找到NanoID,如下所示:;
import?{?nanoid?}?from?‘@reduxjs/toolkit’\
console.log(nanoid())?//‘dgPXxUz_6fWIQBD8XmiSy’
5.自定義字母表
NanoID的另一個(gè)特性是,它允許開發(fā)人員自定義字母表以及生成的id的長(zhǎng)度.
import?{?customAlphabet?}?from?'nanoid';
const?nanoid?=?customAlphabet('ABCDEF1234567890',?12);
model.id?=?nanoid();
在上面的例子中,我將自定義字母表定義為ABCDEF1234567890,Id的長(zhǎng)度為12。
6.無(wú)第三方依賴關(guān)系
由于NanoID不依賴于任何第三方依賴關(guān)系,隨著時(shí)間的推移,它變得更加穩(wěn)定、自治。從長(zhǎng)遠(yuǎn)來看,這有助于優(yōu)化捆綁包的大小,并使其不太容易出現(xiàn)依賴關(guān)系帶來的問題。
局限性和未來焦點(diǎn)
局限性
基于StackOverflow方面的許多專家意見,使用NanoID沒有明顯的缺點(diǎn)或局限性。許多開發(fā)人員在NanoID中看到的主要缺點(diǎn)是不可讀,因?yàn)樗拐{(diào)試更加困難。然而,與UUID相比起來,NanoID卻要短得多,可讀性強(qiáng)得多。此外,如果使用NanoID作為表的主鍵,那么如果使用同一列作為聚集索引,就會(huì)出現(xiàn)問題。這是因?yàn)镹anoIDs不是連續(xù)的。
未來…
NanoID正逐漸成為JavaScript最流行的唯一id生成器,大多數(shù)開發(fā)人員更喜歡選擇它而不是UUID。

上圖顯示了NanoID與其他主要id生成器的性能比較。使用默認(rèn)字母表時(shí),它每秒可以生成超過220萬(wàn)個(gè)唯一ID,使用自定義字母表時(shí)每秒可以生成超過180萬(wàn)個(gè)唯一ID??紤]到NanoID的小尺寸、URL友好性、安全性和速度,建議在未來的項(xiàng)目中使用NanoID而不是UUID。
譯自:https://blog.bitsrc.io/why-is-nanoid-replacing-uuid-1b5100e62ed2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? 少爺,點(diǎn)個(gè)關(guān)注和在看唄!
Node 社群
我組建了一個(gè)氛圍特別好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你對(duì)Node.js學(xué)習(xí)感興趣的話(后續(xù)有計(jì)劃也可以),我們可以一起進(jìn)行Node.js相關(guān)的交流、學(xué)習(xí)、共建。下方加 考拉 好友回復(fù)「Node」即可。
如果你覺得這篇內(nèi)容對(duì)你有幫助,我想請(qǐng)你幫我2個(gè)小忙:
1. 點(diǎn)個(gè)「在看」,讓更多人也能看到這篇文章 2. 訂閱官方博客?www.inode.club?讓我們一起成長(zhǎng) 點(diǎn)贊和在看就是最大的支持??
