Aller au contenu

Routeurs ​

Les routeurs sont l’une des fonctionnalités les plus importantes de Hono.

Hono propose cinq routeurs.

RegExpRouter ​

RegExpRouter est le routeur le plus rapide de l’écosystème JavaScript.

Bien que son nom contienne « RegExp », il ne s’agit pas d’une implémentation de type Express utilisant path-to-regexp. Ces implémentations utilisent des boucles linéaires. Elles doivent donc vérifier les expressions régulières pour toutes les routes, et leurs performances diminuent lorsque le nombre de routes augmente.

Le RegExpRouter de Hono transforme les motifs des routes en « une seule grande expression régulière ». Il peut ainsi obtenir le résultat en une seule opération de correspondance.

Dans la plupart des cas, cette approche est plus rapide que les algorithmes reposant sur des arbres, tels que les arbres radix.

Cependant, RegExpRouter ne prend pas en charge tous les motifs de routes. Il est donc généralement associé à l’un des routeurs suivants, qui les prennent tous en charge.

TrieRouter ​

TrieRouter utilise un algorithme d’arbre trie. Comme RegExpRouter, il n’utilise pas de boucles linéaires.

Ce routeur est moins rapide que RegExpRouter, mais beaucoup plus rapide que le routeur d’Express. TrieRouter prend en charge tous les motifs.

SmartRouter ​

SmartRouter est utile lorsque vous utilisez plusieurs routeurs. Il sélectionne le plus adapté parmi les routeurs enregistrés. Hono utilise SmartRouter, RegExpRouter et TrieRouter par défaut :

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

Au démarrage de l’application, SmartRouter choisit le routeur le plus rapide en fonction des routes, puis continue à l’utiliser.

LinearRouter ​

RegExpRouter est rapide, mais l’enregistrement des routes peut prendre un peu plus de temps. Il ne convient donc pas à un environnement où l’application est initialisée à chaque requête.

LinearRouter est optimisé pour une exécution unique. Il enregistre les routes beaucoup plus rapidement que RegExpRouter, car il les ajoute de manière linéaire sans compiler les chaînes de caractères.

Les résultats de performance suivants incluent la phase d’enregistrement des routes.

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

PatternRouter ​

PatternRouter est le plus petit routeur de Hono.

Hono est déjà compact. Si vous souhaitez réduire encore sa taille pour un environnement aux ressources limitées, utilisez PatternRouter.

Une application utilisant uniquement PatternRouter pèse moins de 15 Ko.

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

Publié sous licence MIT.