首先介紹一下什麼是路由,路由就是根據請求信息將請求定位到具體的實現邏輯的過程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 應用都是中間層,一丟丟的路由尋址優化其實能夠忽略