2011-10-10 2 views
2

나는 몇 천 개의 경로가있는 응용 프로그램을 가지고 있습니다.Asp.NET MVC 경로 성능

각 제품에 대해 textbook/product/id와는 달리 맞춤 URL을 사용하기 때문입니다.

이렇게 많은 URL을 사용하면 라우터에서 성능을 사용할 수 없습니다.

개선 방법을 찾고 있지만 빈 그림입니다.

약 20 개의 정규식 경로와 약 3,000 개의 고유 URL 경로가 있습니다.

어떤 아이디어?

개방형 인 것에 대해 유감스럽게 생각하지만 시작해야할지 모르겠습니다.

+0

* 성능 병목 현상의 원인은 무엇인가 * 구체적으로 설명 할 수 있습니까? 당신이 할 수 없다면, 당신은 아직 충분한 윤곽을 그리지 않았다. – mellamokb

+1

나는 haacks 경로 디버거를 사용하고 성능을 측정하기 위해 타임 스탬프를 설정했다. 나는 (주문) 주위에 내 경로를 이동하고 다소 향상되지만, 마지막에 추가 된 경로는 정말 느립니다. – hivie7510

+0

내가 가지고있는 다른 문제는 라우터 자체를 프로파일 링하는 방법을 모른다는 것입니다. – hivie7510

답변

3

URL이 모두 yoursite.com/{url} 형식 인 경우 데이터베이스에 3 천 개의 URL을 모두 저장하고 {url} 매개 변수를 사용하여 올바른 모양을 나타내는 사용자 지정 컨트롤러 팩토리를 만들 수 있습니다 정보를 데이터베이스에 저장하고 올바른 컨트롤러, 동작 및 사용중인 매개 변수를 지정하십시오.

google에는 컨트롤러 팩토리를 구현하는 방법에 대한 많은 게시물이 있습니다.

기존 경로를 구문 분석하여 데이터베이스에 모두 넣을 수도 있습니다. 응용 프로그램을 인스턴스화 한 후 (예 : RegisterRoutes()가 호출 된 후) RouteTable을 반복하여 수행 할 수 있습니다.

+0

이것은 우리가 가지고 있었던 것과 비슷합니다. IE는, 내가 기본 컨트롤러를 누른 다음 그 URL이 해시 테이블에 있는지 확인하고 적절한 컨트롤러에 연결할 수 있는지 생각하고 있습니다. – hivie7510

0

나는 3 천 개의 고유 한 URL 경로를 없애고 마지막 범례 경로 인 일반 경로로 바꿉니다. 같은 : 또한 다음 사용자 정의 IRouteConstraint를 추가 할 수

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

는 카테고리가 존재하는지 확인 (하지만 그냥 데이터베이스마다 충돌하지 않거나 성능이 저하됩니다 확인)합니다.

+0

나는 학업 경로가 없다고 언급했다 : "이것은 각 제품에 대해 교과서/제품/아이디와 대조적으로 맞춤 URL을 사용하기 때문입니다." – hivie7510

+0

신제품을 추가 할 때마다 글자 그대로 각 URL을 직접 입력 하시겠습니까? ? 여전히 일반 경로로 변환 할 수 있어야합니다. – bkaid

+0

예, SEO를 위해 우리가 제공하는 각 제품에 대한 사용자 정의 URL을 입력합니다. 예를 들어 우리는/air-filter/some-manfacturer-url과 같은 것을 가지고 있습니다. 우리는/brake/some-braker-maker도 가질 수 있습니다. – hivie7510