Router
Die Router gehören zu den wichtigsten Funktionen von Hono.
Hono bietet fünf Router.
RegExpRouter
RegExpRouter ist der schnellste Router in der JavaScript-Welt.
Obwohl er „RegExp“ heißt, handelt es sich nicht um eine Express-ähnliche Implementierung mit path-to-regexp. Solche Implementierungen arbeiten mit linearen Schleifen. Daher werden reguläre Ausdrücke für alle Routen geprüft, und mit zunehmender Anzahl an Routen sinkt die Leistung.

Der RegExpRouter von Hono wandelt die Routenmuster in „einen großen regulären Ausdruck“ um. Dadurch lässt sich das Ergebnis mit einem einzigen Abgleich ermitteln.

In den meisten Fällen ist das schneller als Verfahren mit baumbasierten Algorithmen wie Radix-Bäumen.
RegExpRouter unterstützt jedoch nicht alle Routenmuster. Deshalb wird er üblicherweise mit einem der folgenden Router kombiniert, die sämtliche Routenmuster unterstützen.
TrieRouter
TrieRouter verwendet einen Trie-Baum-Algorithmus. Wie RegExpRouter arbeitet er ohne lineare Schleifen.

Dieser Router ist nicht so schnell wie RegExpRouter, aber deutlich schneller als der Router von Express. TrieRouter unterstützt alle Muster.
SmartRouter
SmartRouter ist nützlich, wenn du mehrere Router verwendest. Er ermittelt aus den registrierten Routern den am besten geeigneten. Hono verwendet standardmäßig SmartRouter, RegExpRouter und TrieRouter:
// Inside the core of Hono.
readonly defaultRouter: Router = new SmartRouter({
routers: [new RegExpRouter(), new TrieRouter()],
})Beim Start der Anwendung ermittelt SmartRouter anhand der Routen den schnellsten Router und verwendet diesen anschließend weiter.
LinearRouter
RegExpRouter ist schnell, die Registrierung der Routen kann jedoch etwas länger dauern. Daher ist er für Umgebungen, in denen die Anwendung bei jeder Anfrage initialisiert wird, nicht geeignet.
LinearRouter ist für die einmalige Ausführung optimiert. Er registriert Routen deutlich schneller als RegExpRouter, da er sie linear hinzufügt, ohne Zeichenketten zu kompilieren.
Im folgenden Benchmark-Ergebnis ist auch die Registrierungsphase der Routen enthalten.
• 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 ist der kleinste Router von Hono.
Hono ist bereits kompakt. Wenn du es für eine Umgebung mit begrenzten Ressourcen noch kleiner halten möchtest, verwende PatternRouter.
Eine Anwendung, die ausschließlich PatternRouter verwendet, ist kleiner als 15 KB.
$ npx wrangler deploy --minify ./src/index.ts
⛅️ wrangler 3.20.0
-------------------
Total Upload: 14.68 KiB / gzip: 5.38 KiB