2011-01-20 4 views
2

J'ai donc une application sur laquelle je travaille au cours de laquelle quelques centaines de clients fonctionnent. Nous travaillons sur une nouvelle application ASP.NET MVC 3 et je travaille sur les routes pour cette application.Des centaines de routes ASP.NET MVC

J'ai posté récemment sur une solution que j'ai inventée pour les routes dynamiques, et cela fonctionne très bien sur quelques entrées que j'ai dans une DB Sql Express. Essentiall il crée des routes pour chaque entrée que j'ai dans cette DB. Donc, ma question est ... Si je devais implémenter cela sur une application d'entreprise, la création de plusieurs centaines sinon de milliers de routes ajoutées à mon application aurait-elle des conséquences négatives?

Répondre

3

En ce qui concerne la table de routage dynamique, il y a une recommendation que vous semblez follow already:

Utiliser des itinéraires nommés. Les routes nommées sont une fonctionnalité facultative de routage . Les noms s'appliquent uniquement à la génération d'URL - ils ne sont jamais utilisés pour les URL entrantes . Lorsque vous spécifiez un nom lorsque génère une URL, nous essayons seulement de correspondre à cette route. Cela signifie que même si la route nommée que vous avez spécifiée est la 100e route dans la table de route , nous allons directement à elle et essayer de match.

Outre le nombre de clients/routes, vous devez également tenir compte du nombre estimé de demandes par jour (pour lesquelles vous devriez être inquiet plus, à mon humble avis), et prendre en compte l'évolutivité de votre serveur web (travailleur threads, matériel, ...) en conséquence.

1

Votre question est légèrement floue. Par "route dynamique" voulez-vous dire que vous allez au niveau DB sur une demande pour résoudre l'itinéraire ou vous interrogez-vous sur votre base de données pour créer le fichier source pour la table de routage?

Dans le premier cas, les performances doivent être constantes. (La surcharge de vérification de la base de données par rapport au nombre d'utilisateurs que vous avez ne changera pas.) Vous devriez donc voir les effets de performance tout de suite. Dans le second cas, je m'attends à ce que le code de routage soit plus lent s'il comporte autant d'éléments à vérifier, mais il est facile à tester.

+0

Ceci est le lien vers mon article original, http://goo.gl/G9G7p Je crée des routes à partir d'entrées dans une base de données où elles spécifient l'URL pour atteindre un certain contrôleur/action/et paramètres, de sorte qu'il semblerait comme ... URL =/blog/{année}/{entryID}, Contrôleur = blog, action = index ... Etc ... Mais comme il est personnalisé, il peut y avoir beaucoup de routes différentes ajoutées ... – jcreamer898

2

Si vos clients utilisent leurs propres domaines avec votre application, utilisez IRouteConstraint personnalisé dans les itinéraires pour vérifier le domaine de la requête et filtrer uniquement ces itinéraires. La solution de Tt protège également le routage contre les collisions.

Donc, la meilleure façon pour vous à la fois - demande de routage - et construire des liens - utiliser le routage mis en cache.

  1. Vous pouvez étendre et hérite par défaut MVC Route classe
  2. Pour speedup le renforcement des liens: Remplacer GetVirtualPath qui calculent à partir des valeurs de hachage RouteData et l'utiliser pour mettre et obtenir des valeurs URL pour et du cache.
  3. Pour accélérer le routage: redéfinissez GetRouteData pour utiliser également RouteDate avec url hash.

Cette solution peut requred plus de mémoire, mais dans la plupart des cas, vous avez un ensemble limité d'URL sur les pages.

0

Il y a un défi de performance lorsque vous commencez à franchir un certain seuil de routes. Je n'ai pas de repères rigides à ce sujet, mais j'ai repensé quelques sites peu performants maintenant.

Plus vous pouvez utiliser le même chemin pour de nombreuses URL différentes avec des paramètres, mieux c'est. Juste à partir de l'observation, il semble que lorsque vous commencez à vous rapprocher des routes 1k, c'est quand il commence vraiment à fond.