【问题标题】:Asp.NET MVC Route PerformanceAsp.NET MVC 路由性能
【发布时间】:2011-12-04 21:31:06
【问题描述】:

我有一个包含几千条路线的应用程序。

这是因为对于每个产品,我们都使用自定义 URL,而不是教科书的 /product/id。

有了这么多的url,路由器的性能是无法接受的。

我正在努力寻找改进它的方法,但我画的是一个空白。

我有大约 20 条正则表达式路由和大约 3000 个唯一的 url 路由。

有什么想法吗?

很抱歉这么开放,但我不知道从哪里开始。

【问题讨论】:

  • 您能解释一下具体是什么原因造成的性能瓶颈吗?如果不能,说明您还没有完成足够的分析。
  • 我使用了 haacks 路由调试器并设置了时间戳来衡量性能。我已经移动了我的路线(顺序)并且它有所改进,但是最后添加的路线真的很慢。
  • 我遇到的另一个问题是我不知道如何配置路由器本身
  • 我假设您已经删除了未使用的视图引擎?
  • 我们只使用剃须刀,但我怎样才能删除其他引擎。这也能提高路由器的性能吗?

标签: asp.net performance asp.net-mvc-3 routes


【解决方案1】:

我会去掉 3000 个唯一的 url 路由,并用一个通用路由替换它们,这是最后一个包罗万象的路由。比如:

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

您还可以添加一个自定义 IRouteConstraint 来验证该类别是否存在(但只需确保它不会每次都访问您的数据库,否则性能会下降)。

【讨论】:

  • 我曾提到我没有学术路线:“这是因为对于每个产品,我们使用自定义 URL,而不是教科书 /product/id”
  • 您每次添加新产品时都会手动输入每个网址吗?您仍然应该能够将它们转换为通用路由。
  • 是的,对于 SEO,我们为我们提供的每种产品输入一个自定义 URL。例如,我们有类似 /air-filter/some-manfacturer-url 的东西。我们可能还有 /brake/some-braker-maker。
  • 让我试试这个,我遇到的问题是使用与索引相关的唯一 url 的数字 (2000) os url。我们过去常常在哈希表中查找它,所以它很快。再次,让我试试看。
  • @hivie7510 为什么不将该 slug(url) 存储在产品表中?如果你这样做了,那么你就不需要那么多路由并且仍然可以获得良好的可读 url,这就是几个博客的工作方式。
【解决方案2】:

如果您的 url 都是 yoursite.com/{url} 格式,您仍然可以将所有三千个 url 存储在数据库中,并创建一个使用 {url} 参数的自定义控制器工厂来查看正确的信息在数据库中并分配正确的控制器、操作和您正在使用的任何参数。

google上有很多关于如何实现控制器工厂的帖子。

我想您还希望对现有路由进行一些解析以将它们全部放入数据库中 - 这可以通过在实例化应用程序后迭代 RouteTable 来完成(即在调用 RegisterRoutes() 之后) .

【讨论】:

  • 这个和我们以前的差不多,我去看看。 IE,我在想,如果我点击默认控制器,那么我可以检查该 url 是否在哈希表中并路由到适当的控制器。
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多