近期旁边的同事问我,获取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 版权协议,转载请附上原文出处链接和本声明。