如果你的项目有生成唯一 key
或者使用 uuid
的场合,那么从现在开始,请使用 NanoID。之前在文章《分享8个可以提高开发效率的JavaScript库》介绍过 NanoID 。NanoID 是一个创建唯一 key
的轻量级的脚本库,在过去有类似需求首先想到的是 uuid ,与其相比 NanoID 要小得多。
const { nanoid } = require("nanoid"); const key = nanoid(); console.log(key); // U6XRwZsfcDuexQ7m55qdy
从 npmjs.com 信息来看,NanoID 一周的下载量达到上千万,此外,NanoID 比 UUID 小了将近 7 岁,而且它的 GitHub 星数已经超过 UUID 了。下图是两个脚本库的趋势数据图:
查看网站数据可以点击这里:www.npmtrends.com/nanoid-vs-u…。
从上面的数据已经足以说明问题了,下面介绍一下 NanoID 的特点。
体积小
和 UUID 相比,NanoID 的大小要小大概 4.5 倍,压缩大小只有 108 字节,并且没有任何依赖关系。
更安全
在大部分随机生成器使用的是不安全的随机数 Math.random()
。而 NanoID
使用 crypto module 。
此外,NanoID 在 ID 生成器的实现过程中使用了自己的称为统一算法的算法,而不是使用随机的字母表。
更高效
NanoID 比 UUID 快 60%,UUID 的字符表使用 36 个不同字符,而 NanoID 只使用了 21 个字符。
此外,NanoID 还支持 14 种不同的编程语言,它们分别是:
C#、C++、Clojure 和 ClojureScript、Crystal、Dart & Flutter、Deno、Go、Elixir、Haskell、Janet、Java、Nim、Perl、PHP、带字典的 Python、Ruby、Rust、Swift
兼容性
NanoID 还支持 PouchDB、CouchDB WebWorkers、Rollup 以及 React 和 Reach-Native 等库。
灵活性
NanoID 的另一个特点是灵活性,它允许开发人员使用自定义字母表。可以更改文字或 id 的大小,如下所示:
const { customAlphabet } = require("nanoid"); const nanoid = customAlphabet("devpointDEV123456789", 6); const nid = nanoid(); console.log(nid); // 4it6tp
局限性
根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。
可读性方面(不便于记忆)应该算是 NanoID 的主要缺点,另外,NanoID 不是连续的,因此不能作为数据库表的主键。
总结
NanoID正逐渐成为Javascript中最流行的唯一id生成器,大多数开发人员更愿意选择它而不是 UUID 。在考虑到它的体积小、URL 友好性、安全性和高效,因此建议从现在开始在项目中使用 NanoID 取代UUID 。