コンテンツにスキップ

ルーター

ルーターはHonoの最も重要な機能です。

Honoには5つのルーターがあります。

RegExpRouter

**RegExpRouter**はJavaScriptの世界で最速のルーターです。

これは「RegExp」と呼ばれていますが、path-to-regexpを使ったExpressのような実装ではありません。それらは線形ループを使用しています。そのため、すべてのルートに対して正規表現のマッチングが実行され、ルートが増えるほどパフォーマンスが低下します。

Router Linear

HonoのRegExpRouterは、ルートルートパターンを「1つの大きな正規表現」に変換します。そして、1回のマッチングで結果を得ることができます。

Router RegExp

これは、ほとんどの場合、radix-treeなどのツリーベースのアルゴリズムを使用するメソッドよりも高速に動作します。

TrieRouter

**TrieRouter**はTrie木アルゴリズムを使用したルーターです。RegExpRouterと同様に線形ループを使用しません。

Router Tree

このルーターはRegExpRouterほど高速ではありませんが、Expressルーターよりもはるかに高速です。TrieRouterはRegExpRouterがサポートしていないすべてのパターンをサポートしています。

SmartRouter

RegExpRouterはすべてのルーティングパターンをサポートしているわけではありません。そのため、通常はすべてのパターンをサポートする別のルーターと組み合わせて使用​​されます。

**SmartRouter**は、登録されたルーターから推測して最適なルーターを選択します。 HonoはデフォルトでSmartRouterと2つのルーターを使用します

ts
// Inside the core of Hono.
readonly defaultRouter: Router = new SmartRouter({
  routers: [new RegExpRouter(), new TrieRouter()],
})

アプリケーションの起動時に、SmartRouterはルーティングに基づいて最速のルーターを検出し、それを使い続けます。

LinearRouter

RegExpRouterは高速ですが、ルート登録フェーズが少し遅くなる可能性があります。そのため、リクエストごとに初期化される環境には適していません。

**LinearRouter**は「ワンショット」の状況に最適化されています。文字列をコンパイルせずに線形アプローチを使用してルートを追加するため、ルート登録はRegExpRouterよりも大幅に高速です。

以下は、ルート登録フェーズを含むベンチマーク結果の1つです。

console
• GET /user/lookup/username/hey
----------------------------------------------------- -----------------------------
LinearRouter     1.82 µs/iter      (1.7 µs … 2.04 µs)   1.84 µs   2.04 µs   2.04 µs
MedleyRouter     4.44 µs/iter     (4.34 µs … 4.54 µs)   4.48 µs   4.54 µs   4.54 µs
FindMyWay       60.36 µs/iter      (45.5 µs … 1.9 ms)  59.88 µs  78.13 µs  82.92 µs
KoaTreeRouter    3.81 µs/iter     (3.73 µs … 3.87 µs)   3.84 µs   3.87 µs   3.87 µs
TrekRouter       5.84 µs/iter     (5.75 µs … 6.04 µs)   5.86 µs   6.04 µs   6.04 µs

summary for GET /user/lookup/username/hey
  LinearRouter
   2.1x faster than KoaTreeRouter
   2.45x faster than MedleyRouter
   3.21x faster than TrekRouter
   33.24x faster than FindMyWay

Fastly Computeのような状況では、 `hono/quick` プリセットでLinearRouterを使用することをお勧めします。

PatternRouter

**PatternRouter**は、Honoのルーターの中で最も小さいルーターです。

Honoはすでにコンパクトですが、リソースが限られている環境でさらに小さくする必要がある場合は、PatternRouterを使用できます。

PatternRouterのみを使用するアプリケーションのサイズは15KB未満です。

console
$ npx wrangler deploy --minify ./src/index.ts
 ⛅️ wrangler 3.20.0
-------------------
Total Upload: 14.68 KiB / gzip: 5.38 KiB

MITライセンスでリリースされています。