首先介绍一下什么是路由,路由就是根据请求信息将请求定位到具体的实现逻辑的过程node
这个过程咱们称之为 路由寻址git
而衡量路由的性能就是经过寻址的时间来判断,时间越短性能越高github
咱们都用过 expess
或者 koa + koa-router
来开发项目数组
它们经过数组的形式保存路由映射表,经过正则匹配的方式遍历路由表来进行寻址数据结构
这种方式直观、简单,可是路由多的状况下,会消耗很是多的资源去作大量没必要要的匹配koa
为了提高寻址能力,咱们可使用空间换时间的方式,将请求 path 拆分后,以特殊的数据结构存储性能
咱们注册如图4个路由:测试
首先,全部路由按照请求 method 分红对应的 method 树优化
而后将请求根据 /
拆封后,组装成树形结构code
为了提高匹配性能,存储节点的时候会保存节点类型,而后根据类型进行匹配
咱们拿到请求路径以后,一样根据/
拆分,
首先根据 method 找到对应的树
而后在树中进行递归搜索,若是匹配到当前节点,则进行下一层搜索 每一个节点都分为两种类型: 正则、字符串
若是当前节点为正则类型则使用正则匹配,适用于正则路由与参数路由等
若是当前节点为字符串类型则使用权等匹配,减小正则匹配次数,提高性能
为了更大的性能提高(减小匹配次数),将节点进行优先级分类,将通过节点的路径最多的节点排在前面
这样将热门路由放在前面,用最少的次数就能够匹配到(后续能够增长手动设置优先级功能)
机器比较烂,对比一下就好....
Stat | Avg | Stdev | Min |
---|---|---|---|
Req/Sec | 33122.91 | 2705.63 | 25830 |
Bytes/Sec | 4.8 MB | 2.64 KB | 25.22 KB |
Stat | Avg | Stdev | Min |
---|---|---|---|
Req/Sec | 11809.64 | 1232.99 | 8115 |
Bytes/Sec | 2.42 MB | 1.2 KB | 7.92 KB |
Stat | Avg | Stdev | Min |
---|---|---|---|
Req/Sec | 6851.46 | 571.17 | 5103 |
Bytes/Sec | 1016.86 KB | 571 B | 4.98 KB |
目前不少 node 应用都是中间层,一丢丢的路由寻址优化其实能够忽略