6 powodów, dla których NanoID jest lepszy od UUID
UUID, czyli Universally Unique Identifier, to jeden z najczęściej używanych identyfikatorów w rozwoju oprogramowania. Pojawiło się jednak wiele nowych alternatyw, które zagrażają jego pozycji. Na czele tych wszystkich alternatyw kroczy NanoID. W artykule tym skupimy się na wszystkich funkcjach nowego generatora - omówimy zarówno wady, jak i zalety dla lepszego zrozumienia, jak tego właściwie używać.
O co chodzi w NanoID i jak go używać?
Jeśli chodzi o JavaScript, to generowanie UUID i NanoID jest bardzo proste. Obie te rzeczy mają pakiety npm, które znacznie Ci pomogą. Wszystko, co musisz tutaj zrobić, to zainstalować bibliotekę NanoID NPM, korzystając z komend npm i nanoid i gotowe.
import { nanoid } from 'nanoid';
model.id = nanoid();
Czy wiedziałeś, że NanoID ma ponad 11 754 000 pobrań z NPM tygodniowo i jest 60% szybszy od UUID? Co więcej, NanoID jest prawie 7 lat młodsze od UUID i już teraz ma o wiele więcej gwiazdek na GitHubie, niż swój poprzednik.
Poniższy graf pokazuje trendy w NPM dla NanoID oraz UUID — widzimy tendencję wzrostową dla NanoID w porównaniu do stagnacji UUID.
https://www.npmtrends.com/nanoid-vs-uuid
Mam nadzieję, że już teraz czujesz się przekonany do skorzystania z NanoID. Niemniej jednak główna różnica między tymi dwoma identyfikatorami jest całkiem prosta — sprowadza się ona do alfabetu, z którego dany klucz korzysta.
Ponieważ NanoID korzysta z większego alfabetu, niż UUID, to krótsze ID można wykorzystać w tym samym celu, co dłuższe UUID.
1. NanoID ma tylko 108 bajtów
Kod NanoID jest 4.5 raza mniejszy od UUID. Redukcja rozmiaru wpływa bezpośrednio na dane. Na przykład, obiekt korzystający z NanoID jest kompaktowy, tak dane można było transferować i przechowywać. Wraz ze wzrostem rozmiaru aplikacji, zmiany te zaczyna być widać.
2. NanoID jest bezpieczniejszy
Większość generatorów używa mało bezpiecznego Math.random()
, ale NanoID korzysta z crypto module
oraz Web Crypto API
, które są o wiele bezpieczniejsze.
Co więcej, zamiast skorzystać z random % alphabet
, NanoID wykorzystał swój własny algorytm o nazwie uniform do implementacji generatora ID.
3. NanoID: jest szybki i kompaktowy
NanoID jest o 60% szybszy od UUID. Zamiast 36 znaków, alfabet NanoID ma tylko 21 znaków.
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-
Co więcej, NanoID obsługuje 14 języków programowania:
C#, C++, Clojure and ClojureScript, Crystal, Dart & Flutter, Deno, Go, Elixir, Haskell, Janet, Java, Nim, Perl, PHP, Python with dictionaries, Ruby , Rust, Swift
4. Kompatybilność
NanoID obsługuje też PouchDB, CouchDB Web Workers, Rollup oraz takie biblioteki jak React i React-Native. Unikalny ID w terminalu można uzyskać korzystając z npx nanoid
. Jedynym warunkiem jest posiadanie zainstalowanego NodeJSa.
NanoID jest również dostępne wewnątrz zestawu narzędzi Redux. Możesz go użyć do innych przypadków użycia, takich jak:
import { nanoid } from ‘@reduxjs/toolkit’
console.log(nanoid()) //‘dgPXxUz_6fWIQBD8XmiSy’
5. Niestandardowy alfabet
NanoID pozwala również developerom na korzystanie z niestandardowego alfabetu. Możesz zmienić literał albo rozmiar identyfikatora w następujący sposób:
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('ABCDEF1234567890', 12);
model.id = nanoid();
W powyższym przykładzie zdefiniowałem niestandardowy alfabet jako ABCDEF1234567890
, a rozmiar ID jako 12.
6. Brak zewnętrznych zależności
Ponieważ NanoID nie polega na żadnych zewnętrznych zależnościach, to staje się coraz bardziej stabilny i autonomiczny.
Jest to niezbędne do długofalowego optymalizowania rozmiaru pakietu i sprawienia, aby był on mniej podatny na błędy, które mogą się pojawić wraz z zależnościami.
Ograniczenia i na czym się skupić w przyszłości
Opierając się na wielu opiniach ze StackOverflow, można powiedzieć, że nie ma większych problemów z korzystaniem z NanoID.
Trudności z czytaniem go przez człowieka jest chyba głównym problemem, jaki wielu developerów widzi w NanoID, ponieważ sprawia to, że debugowanie jest wtedy cięższe. Porównując to jednak do UUID, NanoID jest o wiele krótsze i bardziej czytelne.
Co więcej, jeśli korzystasz z NanoID jako głównego klucza bazy danych, to mogą pojawić się problemy w sytuacji, w której używa się tej samej kolumny jako indeksu klastrowanego. Dzieje się tak, ponieważ NanoID nie jest sekwencyjny
Na przyszłość...
NanoID staje się najpopularniejszym unikalnym generatorem identyfikatorów dla JS i większość developerów woli go od UUID.
Źródło: https://www.npmjs.com/package/nanoid
Powyższe testy porównawcze pokazują wydajność NanoID w porównaniu do innych generatorów.
NanoID jest w stanie wygenerować ponad 2,2 miliona unikalnych identyfikatorów na sekundę, korzystając z domyślnego alfabetu i ponad 1,8 milionów, kiedy użytkownik korzysta z niestandardowego alfabetu.
Sam korzystałem zarówno z UUID oraz NanoID i zdecydowanie bardziej polecam NanoID ze względu na mniejszy rozmiar, bycie przyjaznym dla URL, bezpieczeństwo i prędkość. Polecam więc wykorzystać NanoID w swoich projektach i podzielić się wrażeniami w komentarzach.
Dziękuję za uwagę :)
Oryginał tekstu w języku angielskim możesz przeczytać tutaj.