ルーター
ルーターは Hono の最も重要な機能です。
Hono には 5 種類のルーターがあります。
RegExpRouter
RegExpRouter は JavaScript で最速のルーターです。
名前に「RegExp」とありますが、Express のように path-to-regexp を使う実装ではありません。 そのような実装は線形ループを使い、すべてのルートに対して正規表現の照合を行うため、ルート数が増えるほど性能が低下します。

Hono の RegExpRouter は、ルートのパターンを「1 つの大きな正規表現」に変換し、1 回の照合で結果を得ます。

多くの場合、radix-tree などの木構造に基づくアルゴリズムより高速です。
ただし、RegExpRouter はすべてのルーティングパターンに対応しているわけではありません。そのため、通常は以下の全パターンに対応したルーターと組み合わせて使用します。
TrieRouter
TrieRouter は Trie 木アルゴリズムを使うルーターです。RegExpRouter と同様に、線形ループを使用しません。

RegExpRouter ほど高速ではありませんが、Express のルーターよりはるかに高速です。 TrieRouter はすべてのパターンに対応しています。
SmartRouter
SmartRouter は複数のルーターを使うときに便利です。登録されたルーターから最適なものを選びます。 Hono は標準で SmartRouter、RegExpRouter、TrieRouter を使用します。
// Inside the core of Hono.
readonly defaultRouter: Router = new SmartRouter({
routers: [new RegExpRouter(), new TrieRouter()],
})アプリケーション起動時に、SmartRouter は登録されたルートに基づいて最速のルーターを選び、その後も使い続けます。
LinearRouter
RegExpRouter は高速ですが、ルート登録には少し時間がかかる場合があります。そのため、リクエストごとに初期化する環境には適していません。
LinearRouter は「一度きり」の実行に最適化されています。 文字列のコンパイルを行わず、線形の方式でルートを追加するため、RegExpRouter より大幅に高速にルートを登録できます。
次に、ルート登録フェーズも含めたベンチマーク結果の一例を示します。
• 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 FindMyWayPatternRouter
PatternRouter は Hono のルーターの中で最も小さいルーターです。
Hono はもともとコンパクトですが、リソースが限られた環境でさらに小さくしたい場合は PatternRouter を使用してください。
PatternRouter のみを使うアプリケーションは、15KB 未満になります。
$ npx wrangler deploy --minify ./src/index.ts
⛅️ wrangler 3.20.0
-------------------
Total Upload: 14.68 KiB / gzip: 5.38 KiB