この記事何?
エンジニア歴1年半。業務で利用しているHonoが大好きだが、TSもプログラミング知識も弱々すぎて上手く使いこなせない。速いはずが多分生かせてない。
ちゃんと理解するためにソースコードリーディングしたい。
でも目的なくソースコード眺めても意味ないし……ねむい……
そうだ!PRを全部読めば、変遷やなぜ変更されているかストーリー的に分かるのでは。
と思ったのでチャレンジしてみる。PR2000以上あるので、全部できるかは知らん。
https://github.com/honojs/hono
#1 Create LICENSE
MITライセンスの明記。
#2
なし
#3 Update document
ドキュメントが少し補足されている。
名前が、hono -> Honoになってる。
サンプルコードの追加
const app = new Hono()
app.get('/', () => new Response('Hono!!'))
app.fire()
ファイア🔥!!
調べたら、.fire()今は非推奨の様子。ファイアしたかった。無念。
特徴
- 高速 - ルーターは Trie(トライ)木構造で実装されています
- 軽量 - 標準APIのみを使用しています
- 移植性が高い - 依存パッケージはゼロです
- Cloudflare Workers 向けに最適化 されています
おお、今とスタンス変わってない。Honoの基本思想と言えそう。
トライについてもよく知らないので調べてみる。
なるほど、わからん。
文字列を 1 文字ずつノードとして接続して保存するデータ構造で、検索時間が文字列長に依存し、データ量に依存しないから速いのかな??
細かい仕組みがよくわかんない。とりあえず理解は置いといて次。
Named Parameter、 Regexp、Chained RouteなどのRouteについて追記されている。
これらは今もある。はず。
#4 Fixed tests
テストの軽微な修正
- Node インスタンス生成位置の変更
- テストケース追加(Root Node の動作確認)
- Nodeが
/ルートを正しく登録・検索できるかの確認 -
/helloを登録した場合に/が誤ってヒットしないかを確認
- Nodeが
#5 Support query and param method on Request
src/hono.js
- メソッド名の変更
-
matchRoute(method, path)->match(method, path) -
handle()→handleEvent()
-
- dispatch() メソッドのロジック改善
- クエリ取得とパラメータ取得を追加
Request → dispatch()
├─ URL解析 (new URL(request.url))
├─ match(method, path)
│ └─ Trie木を使って対応ルートを検索
├─ 結果(result)をもとに:
│ ├─ request.query(key) = URL検索パラメータ
│ └─ request.params(key) = ルートパラメータ
└─ result.handler(request) 実行
こうぽい。
src/hono.test.js
- params and queryのテスト追加
今回はここまで。ぜひコメントあればお待ちしています。