获取uuid哪种方法效率最高

  • Post author:
  • Post category:其他

近期旁边的同事问我,获取uuid有什么方法?

我随口就回答:用uuid包,因为一直都在用,感觉没啥问题。

后来他手动调了几下自己写的函数,说:有几毫秒的性能消耗。

我心想不是正常的吗?

他又说,有没有再快一点的获取方法?

我说,我找找。

找了3个来做一下性能测试,比较下它们的性能。

randomUUID uuid nanoid
nodejs原生自带 github(13.2K Start) github(20.4K Start)

来个10万次循环测试下它们的性能。

let startTime = new Date().getTime();
let str = '';
console.log('=======start randomUUID======')
console.log(startTime);

const {randomUUID} = require('crypto');
const total = 100000;

for (let i = 0; i < total; i++) {
    str = randomUUID()
}

let endTime = new Date().getTime();
console.log(endTime);
let sub = endTime - startTime;

console.log(str);
console.log(sub);
console.log('=======edn randomUUID======');


startTime = new Date().getTime();
console.log('=======start uuid======')
console.log(startTime);

const { v4 } = require('uuid');


for (let i = 0; i < total; i++) {
    str = v4();
}

endTime = new Date().getTime();
console.log(endTime);
sub = endTime - startTime;

console.log(str);
console.log(sub);
console.log('=======edn uuid======');

startTime = new Date().getTime();
console.log('=======start nanoid======')
console.log(startTime);

const { nanoid } = require("nanoid");

for (let i = 0; i < total; i++) {
    str= nanoid();
}

endTime = new Date().getTime();
console.log(endTime);
sub = endTime - startTime;

console.log(str);
console.log(sub);
console.log('=======edn nanoid======');

结论:

在这里插入图片描述

测试项 randomUUID uuid nanoid
用时(毫秒) 58 289 63
生成格式 f3c285ef-45ef-4f05-a087-0e44395b7a24 bc9d99be-c6b3-439a-b139-67722a43bf71 bYALoMs3jocZoUhF-0yYn

大家可以发现,nodejs原生自带的函数效率最高,其次是nanoid,效率最低是uuid包。

至于生成格式方面,nanoid有更短的生成方式,在牺牲一些性能的前提可以考虑。

最后,发现自己的不足,所谓三人行必有我师,多思考生活工作中遇到的问题,将有助于我们更好地看清这个复杂的世界。


版权声明:本文为Wai_Leung原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。