2013-05-16 3 views
0

우리는 ASP.NET 3과 .NET 4 및 몇 가지 다른 IIS (7, 8 및 Express 버전)를 사용하고 있습니다.우리의 요청은 왜 돌아 오는 데 오랜 시간이 걸립니까?

서버에 대한 모든 요청은 요청한 내용에 관계없이 길이가 길어 약 10 초 정도입니다. 우리는 (디버거를 부착함으로써) 컨트롤러 메소드가 즉시 호출되고 신속하게 (밀리 세컨드 이내에서) 리턴되는 것을 볼 수 있습니다.

GET이 완료되면 브라우저가 렌더링을 빠르게 완료하는 것을 볼 수 있습니다 (밀리 초 이내). 따라서 지연은 예를 들어 'View (무엇이든간에)'를 반환하고 GET을 완료합니다. 이것은 나에게 컴파일보기와 같은 것을 제안하지만 모든 요청에서 발생하므로 첫 번째 요청 후에 View가 컴파일되지 않아야합니까?

프리 컴파일보기 (View precompilation)를 사용할 수는 있지만 불행하게도 많은 오류를 일으키고 전체 웹 프로젝트를 다시 만들 필요가 없기 때문에 사전에 작업 할 수 있습니다. 위에서 말했듯이 뷰는 처음 사용할 때 컴파일해야하므로 프리 컴파일은 특정 뷰를 사용하는 첫 번째 요청에만 도움이됩니다.

어떻게 진단하고 실제로 시간을 확인하고 있는지 알아보십시오.


편집 : 모든 페이지에서 렌더링되는 부분보기 중 하나를 꺼낸 후 갑자기 모든 것이 빨라집니다. 지금 그 견해를 조사하십시오.

+2

.net 프로파일 러 도구를 사용 했습니까? – asawyer

+1

IE를 실행하고 F12를 누르고 네트워킹 탭으로 이동하면 각 요청에 대해 얼마나 오랫동안 표시됩니까? – Nate

+1

클라이언트 네트워크 프로필을 보았습니까? Chrome에는 멋진 도구가 있으며 F12를 누르고 '네트워크'를 클릭 한 다음 페이지를로드하고 오래 걸리는 부분을 확인합니다. –

답변

1

범인의 코드는 다음과 같습니다

itemFactory.Add() 
    .Text(menuItem.Caption) 
    .Selected(menuItem.Selected) 
    .Action(menuItem.Action, menuItem.Controller) 
    .Enabled(menuItem.Enabled) 
    .Visible(menuItem.Visible) 
    ; 

이 C# 코드는 Telerik PanelBar (메뉴)를 구축하고있다. 이 '유창한 인터페이스'의 다양한 방법은 추가되는 항목에 대한 속성을 설정하는 것입니다.

예상치 못한 한 가지 방법은 Action (actionName, controllerName)입니다.

PanelBar 항목을 클릭 할 때 컨트롤러 동작을 실행하도록 설정하는 대신이 메서드를 호출하면 실제로 컨트롤러에서 작업이 실행됩니다.

위의 코드를 추적하면 거의 즉시 실행되어 보이지 않으므로 비동기 적으로 수행 된 것으로 보입니다.

해결 방법은 Action 메서드가 아닌 Url 메서드를 사용하고 ASP.NET MVC URL 메서드를 사용하여 URL을 작성하는 것입니다. Telerik ASP.NET MVC 프레임 워크는 확실히 초 첫 MVC 및 URL과 함께 작동해야하지만 우리가해야으로이 아니라 직관적입니다 :

  1. 오히려 방법이 무슨 짓을했는지 가정보다 문서 상담
  2. 는 것으로 나타났습니다 응용 프로그램이 갑자기 그 제어 방법은 내가 기대하지 않았다 호출되는 같았다 때문에, 나는 프로파일 러를 실행 한 후 우둔했던

각 페이지로드, 대형, 고정 양만큼 느린되었다 - 그리고 전화의 출처는 Telerik의 코드 (우리가 아닌)에서 나온 것으로 보입니다. Navigation 부분보기의 부분을 한 번에 하나씩 제거하여 결국 Action()이 수행하는 작업을 발견하게되었습니다.

비동기 코드는 디버그/프로필을 시도 할 때를 제외하고 어디에서 왔는지 찾을 수 없습니다!

의견에 제안 해 주셔서 감사합니다.

관련 문제