Крошечный, удобный для URL генератор уникальных строк для JavaScript.

UUID - один из наиболее часто используемых универсальных идентификаторов в разработке программного обеспечения. Однако за последние несколько лет его существование поставили под сомнение другие альтернативы.

Из них NanoID - один из ведущих конкурентов, пришедших на смену UUID.

Итак, в этой статье я расскажу об особенностях NanoID, о его преимуществах и его ограничениях, чтобы вы лучше понимали, когда его использовать.

Понять NanoID и его использование

Когда дело доходит до JavaScript, создание UUID или NanoID довольно просто. У них обоих есть пакеты NPM, которые помогут вам в этом.

Все, что вам нужно сделать, это установить библиотеку NanoID NPM с помощью команды npm i nanoid и использовать ее в своем проекте.

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

Знаете ли вы, что NanoID имеет более 11 754 тыс. Загрузок NPM в неделю и на 60% быстрее, чем UUID?

К тому же NanoID почти на 7 лет моложе UUID, а звезд на GitHub у него уже больше, чем у UUID.

На приведенном ниже графике показано сравнение тенденций npm между этими двумя, и мы видим тенденцию к росту NanoID по сравнению с постоянным прогрессом UUID.

Надеюсь, эти цифры уже убедили вас попробовать NanoID.

Однако основное различие между ними простое. Все сводится к алфавиту, используемому ключом.

Поскольку NanoID использует более крупный алфавит, чем UUID, более короткий идентификатор может служить той же цели, что и более длинный UUID.

1. Размер NanoID составляет всего 108 байт.

В отличие от UUID, NanoID в 4,5 раза меньше по размеру и не имеет никаких зависимостей. Кроме того, ограничение размера было использовано для уменьшения размера еще с 35%.

Уменьшение размера напрямую влияет на размер данных. Например, объект, использующий NanoID, невелик и компактен для передачи и хранения данных. По мере роста приложений эти цифры становятся заметными.

2. Более безопасный

В большинстве генераторов случайных чисел используется небезопасный Math.random(). Но NanoID использует crypto module и Web Crypto API, что более безопасно.

Кроме того, NanoID использовал свой собственный алгоритм, называемый унифицированный алгоритм, во время реализации генератора идентификаторов вместо использования random % alphabet

3. Это быстрый и компактный

NanoID на 60% быстрее UUID. Вместо 36 символов в алфавите UUID, 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.. Единственным условием является наличие установленного NodeJS.

Кроме того, вы также можете найти NanoID внутри Redux toolkit и использовать его в следующих случаях:

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

5. Пользовательские алфавиты

Еще одна существующая функция NanoID заключается в том, что она позволяет разработчикам использовать собственные алфавиты. Вы можете изменить литералы или размер идентификатора, как показано ниже:

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

В приведенном выше примере я определил собственный алфавит как ABCDEF1234567890, а размер идентификатора - как 12.

6. Отсутствие сторонних зависимостей

Поскольку NanoID не зависит от сторонних зависимостей, со временем он становится более стабильным и самоуправляемым.

Это полезно для оптимизации размера пакета в долгосрочной перспективе и уменьшения его подверженности проблемам, связанным с зависимостями.

Ограничения и ориентация на будущее

Основываясь на мнениях многих экспертов по StackOverflow, использование NanoID не имеет существенных недостатков или ограничений.

То, что он не читается человеком, является основным недостатком, который многие разработчики видят в NanoID, поскольку он затрудняет отладку. Но по сравнению с UUID NanoID намного короче и читабельнее.

Кроме того, если вы используете NanoID в качестве первичного ключа таблицы, возникнут проблемы, если вы будете использовать тот же столбец, что и кластеризованный индекс. Это потому, что NanoID не являются последовательными.

В будущем…

NanoID постепенно становится самым популярным генератором уникальных идентификаторов для JavaScript, и большинство разработчиков предпочитают выбирать его вместо UUID.

Вышеупомянутые тесты показывают производительность NanoID по сравнению с другими основными генераторами идентификаторов.

Он может генерировать более 2,2 миллиона уникальных идентификаторов в секунду со своим алфавитом по умолчанию и более 1,8 миллиона уникальных идентификаторов в секунду при использовании пользовательского алфавита.

Имея опыт использования как UUID, так и NanoID, я предлагаю использовать NanoID вместо UUID для любых будущих проектов, учитывая его небольшой размер, удобство использования URL-адресов, безопасность и скорость.

Итак, я приглашаю вас опробовать NanoID в вашем следующем проекте и поделиться своими мыслями с другими в разделе комментариев.

Спасибо за чтение !!!

Создавайте приложения иначе

Инструменты OSS, такие как Bit, предлагают новую парадигму для создания современных приложений.

Вместо того чтобы разрабатывать монолитные проекты, вы сначала создаете независимые компоненты. Затем вы собираете свои компоненты вместе, чтобы создать столько приложений, сколько захотите. Это не только более быстрый способ сборки, но и более масштабируемый, он помогает стандартизировать разработку.

Это весело, попробуй →

Подробнее