第23期 - blog
Habits of great software engineers-第二十三期
优秀的软件工程师习惯,一起变得越来越优秀呀~ 祝大家五一节快乐呀~五一节回家了,回家就像打卡一样,一件件事情,都要慢慢完成,好在有家人陪伴。很久没有见到的长辈,这次都看到了。
技术类分享
promise
https://www.lydiahallie.com/blog/promise-execution
JavaScript中Promise对象的深入解析,它通过可视化的方式帮助读者理解Promise是如何工作的。很好奇这样的可视化工具是什么,或者是自己维护开发的。
Tauri
https://github.com/tauri-apps/tauri
跟electron相似,可以构建跨平台的桌面app,stars数量也很高,不知道会不会比electron省内存一些,可以试试。
main-thread-scheduling
https://github.com/astoilkov/main-thread-scheduling
这个 JS 模块号称可以把计算量大的任务放到主进程,同时又不会阻塞主进程,UI 界面保持对用户的随时响应。它的源码有学习价值。
nanid
一个小型、安全、URL 友好、唯一的 JavaScript 字符串 ID 生成器。
获取唯一的id值,之前只知道lodash里面的uniqueId,今天同事分享这个nanoid更加安全可靠,使用的是使用硬件随机发生器。uniqueId的实现就是内部存储一个变量,从而对输入的字符串进行累加。
const uniqueId = require('lodash/uniqueId')
console.log(uniqueId('uni')) // uni1
console.log(uniqueId('uni')) // uni2
console.log(uniqueId('uni')) // uni3
console.log(uniqueId('uni')) // uni4
nanid的浏览器环境内具体实现:
export const scopedUrlAlphabet =
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
export let nanoid = (size = 21) => {
let id = ''
let bytes = crypto.getRandomValues(new Uint8Array(size))
while (size--) {
// Using the bitwise AND operator to "cap" the value of
// the random byte from 255 to 63, in that way we can make sure
// that the value will be a valid index for the "chars" string.
id += scopedUrlAlphabet[bytes[size] & 63]
}
return id
}
获取随机数,大家都会想到使用Math.random(),但是生成的随机数不一定是唯一的,不能做唯一id值,所以很多时候,我们还会想到Date.now()时间戳,但是同一毫秒内,还是存在误差,所以用做唯一id也还是有隐患;而且不同应用,同一时间,就无法保证唯一了。
还有performance.now(),方法返回一个精确到毫秒的时间戳,比上面的Date.now()更加精准,并且不受系统时间更改而改变,也就说你更改了系统时间,但是这个值是不会发生变化的。但是Date.now有的问题,performance.now依然存在,精度限制,不包含随机性。
安全随机数的生成,还可以看这篇文章:
https://gist.github.com/joepie91/7105003c3b26e65efcea63f3db82dfba
非技术类分享
always sprinting(永远冲刺)
https://cbh.bearblog.dev/always-sprinting/
敏捷开发有一个问题,就是它要求”新的冲刺在上一个冲刺结束后立即开始。” 有了这个规则,程序员就陷入了永远冲刺的陷阱。 其实无论是写代码还是跑步,都不能一直处于冲刺状态,人是需要休息的,能维持长久运动的状态,一定是自己身体调节得当。
优秀的软件工程师的习惯
https://vadimkravcenko.com/shorts/habits-of-great-software-engineers/
因为喜欢编程,喜欢这份职业,所以努力朝着这个方向靠近,这些优秀的习惯,共勉!!!