Skip to content

Instantly share code, notes, and snippets.

@mryhryki
Last active June 9, 2024 06:31
Show Gist options
  • Save mryhryki/bf2c7b2e0e0998cea728ba879e5cf255 to your computer and use it in GitHub Desktop.
Save mryhryki/bf2c7b2e0e0998cea728ba879e5cf255 to your computer and use it in GitHub Desktop.

test-nano-id

Result

This is a result of the test in my environment.

$ npm start >/dev/null
[Generate 1000000 IDs, Node.js version: v20.14.0]
#crypto.generateRandomUUID(): 1408.667041ms
#crypto.getRandomValues()   : 2624.5462079999998ms
#nanoid()                   : 1425.9569999999994ms
node_modules
package-lock.json
import { nanoid } from 'nanoid';
const measure = (id, callback) => {
const start = performance.now();
callback();
const end = performance.now();
console.error(`#${id}: ${end - start}ms`);
};
const generateUuidByCryptoGetRandomValues = () => {
console.log(crypto.randomUUID());
}
const generateIdByCryptoGetRandomValues = () => {
const arr = new Uint8Array(16);
crypto.getRandomValues(arr)
console.log(Buffer.from(arr).toString("base64url"));
}
const generateIdByNanoId = () => {
console.log(nanoid());
}
const GenerateCount = 1_000_000;
const main = () => {
console.error(`[Generate ${GenerateCount} IDs, Node.js version: ${process.version}]`);
measure(`crypto.generateRandomUUID()`, () => {
for (let i = 0; i < GenerateCount; i++) {
generateUuidByCryptoGetRandomValues();
}
})
measure(`crypto.getRandomValues() `, () => {
for (let i = 0; i < GenerateCount; i++) {
generateIdByCryptoGetRandomValues();
}
})
measure(`nanoid() `, () => {
for (let i = 0; i < GenerateCount; i++) {
generateIdByNanoId();
}
})
}
main();
{
"name": "gist_20240609_test-nano-id",
"author": "mryhryki",
"private": true,
"license": "MIT",
"type": "module",
"scripts": {
"start": "node ./index.js"
},
"dependencies": {
"nanoid": "^5.0.7"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment