Производительность маршрута Asp.NET MVC - PullRequest
2 голосов
/ 11 октября 2011

У меня есть приложение с парой тысяч маршрутов.

Это связано с тем, что для каждого продукта мы используем собственный URL-адрес, а не учебник /product/id.

При таком количестве URL-адресов производительность в маршрутизаторе неприемлема.

Я пытаюсь найти способы улучшить его, но я рисую пробел.

У меня около 20 маршрутов регулярных выражений и около 3 тысяч уникальных URL-маршрутов.

ЛюбыеИдеи?

Извините за такой открытый конец, но я не уверен, с чего начать.

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Если все ваши URL-адреса имеют формат yoursite.com/advanurl}, вы все равно можете сохранить все три тысячи URL-адресов в базе данных и создать собственную фабрику контроллеров, которая использует параметр {url} для поиска правильной информации.в базе данных и назначьте правильный контроллер, действие и любые параметры, которые вы используете.

В google есть множество сообщений о том, как реализовать фабрику контроллеров.

Я полагаю, что вам также понадобится провести некоторый анализ существующих маршрутов, чтобы поместить их все в базу данных - это, вероятно, можно сделать, выполнив итерации по RouteTable после создания экземпляра приложения (т. Е. После вызова RegisterRoutes()).1009 *

0 голосов
/ 11 октября 2011

Я бы избавился от 3 тысяч уникальных URL-маршрутов и заменил бы их общим маршрутом, который является последним универсальным маршрутом.Что-то вроде:

routes.MapRoute("productRoute", "{category}/{manufacturer}/{productTitle}", new { controller = "Products", action = "Index", category = UrlParameter.Optional, manufacturer = UrlParameter.Optional, productTitle = UrlParameter.Optional });

Вы также можете добавить пользовательский IRouteConstraint для проверки того, что категория существует (но просто убедитесь, что она не попадает в вашу базу данных каждый раз, когда производительность ухудшится).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...