浏览器中有事件循环,node 中也有,通过本文可了解到node的事件循环机制,以及node与浏览器事件循环的差异
node 的事件循环的阶段顺序:
- 定时器检测阶段(timers):本阶段执行 timer 的回调,即 setTimeout、setInterval 里面的回调函数。
- I/O事件回调阶段(I/O callbacks):执行延迟到下一个循环迭代的 I/O 回调,即上一轮循环中未被执行的一些I/O回调。
- 闲置阶段(idle, prepare):仅系统内部使用。
- 轮询阶段(poll):检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,那些由计时器和 setImmediate() 调度的之外),其余情况 node 将在适当的时候在此阻塞。
- 检查阶段(check):setImmediate() 回调函数在这里执行
- 关闭事件回调阶段(close callback):一些关闭的回调函数,如:socket.on('close', ...)。
node 和 浏览器 eventLoop的主要区别
两者最主要的区别在于浏览器中的微任务是在每个相应的宏任务完成后执行的,而node中的微任务是在不同阶段之间执行的。
软件复杂度可按照维度分为很多类,其中,认知复杂度、基本复杂度、模块设计复杂度、圈复杂度是我们我开发需要重点关注的指标,是评估我们代码质量的重要标准。
圈复杂度有两种计算方法
- if...else 语句
- while 语句
- for 语句
- case 语句
- try...catch 语句
- and 和 or 布尔操作
- ? : 三元运算符
降低圈复杂度的方法
- 优化表达式:针对if,else判断的处理,如果之后没有处理,则在if中直接返回,else无需使用
- 提炼函数:将条件判定提炼出独立函数,大函数抽取为多个小函数
- 使用工具类:判空等操作可以使用工具类,减少||,&&的判断使用
- 使用Map:类似下面这种if判断的,可以通过Map实现简化。
JWT是json web token的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token
- JWT默认不加密,但可以加密。生成原始令牌后,可以使用改令牌再次对其进行加密。
- 当JWT未加密方法时,一些私密数据无法通过JWT传输。
- JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。
- JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效
- JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证。
- 为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。
代码里写了约 30 个 if else 逻辑,从程序语义以及程序效率理论上是会有一定的影响,
我们可以switch case 或策略模式来重构代码
策略设计模式让各种算法的代码、内部数据和依赖关系与其他代码隔离开来。不同客户端可通过一个简单接口执行算法,并能在运行时进行切换。
当然在设计实现程序功能的时候,如果需要使用策略设计模式,也更需要我们的工程师有一个功能全局把控的能力,才能更好将依赖关系拆分,抽象化,以此才能凸显“新生代”民工的不同!
首次有效绘制表示当前页面最想展示给用户的元素渲染的时间点,即主元素渲染点。
First meaning paint represents the rendering time point of the element that the current page most wants to show to the user
Fair是为Flutter设计的动态化框架,通过Fair Compiler工具对原生Dart源文件的自动转化,使项目获得动态更新Widget Tree和State的能力。
创建Fair的目标是支持不发版(Android、iOS、Web)的情况下,通过业务bundle和JS下发实现更新,方式类似于React Native。与Flutter Fair集成后,您可以快速发布新的页面,而无需等待应用的下一个发布日期。Fair提供了标准的Widget,它可以被用作一个新的动态页面或作为现有Flutter页面的一部分,诸如运营位的排版/样式修改,整页面替换,局部替换等都可以使用。
这个周刊每周一发布,同步更新在github、微信公众号。