ASP.NET MVC 응용 프로그램 성능을 어떻게 개선합니까?
답변
가능한 개선 소스 목록은 다음과 같습니다.
일반
- 프로파일 러를 사용하여 응용 프로그램의 메모리 누수 및 성능 문제를 발견하십시오. 개인적으로 나는 dotTrace를 제안합니다
- 프로덕션 환경이나 성능 프로파일 링 중에는 디버그 모드가 아닌 릴리스 모드로 사이트를 실행하십시오. 릴리스 모드가 훨씬 빠릅니다. 디버그 모드는 자체 코드에서 성능 문제를 숨길 수 있습니다.
캐싱
CompiledQuery.Compile()
쿼리 표현식의 재 컴파일을 피하면서 재귀 적으로 사용OutputCacheAttribute
불필요하고 행동적인 실행을 저장하기 위해 사용 하기 쉬운 변경하지 않는 컨텐츠 캐시- 자주 액세스하는 중요하지 않은 정보에 쿠키 사용
- ETag 및 만료 활용 –
ActionResult
필요한 경우 사용자 정의 방법 작성 - 를 사용
RouteName
하여 경로를 구성한 다음이를 사용하여 링크를 생성하고 표현식 트리 기반 ActionLink 메소드를 사용하지 마십시오. - 경로 확인 캐싱 전략 구현 고려
- 에 반복적 인 코드를 넣고 xxxx 번
PartialViews
렌더링하지 마십시오 . 동일한 뷰에서 동일한 부분을 300 번 호출하면 문제가있을 수 있습니다. 설명 및 벤치 마크
라우팅
-
사용
Url.RouteUrl("User", new { username = "joeuser" })
경로를 지정할 수 있습니다. ASP.NET MVC 성능 : Rudi Benkovic -
이 도우미 ASP.NET MVC 성능을 사용한 캐시 경로 해결
UrlHelperCached
Rudi Benkovic
보안
- 양식 인증 사용, 인증 티켓에 자주 액세스하는 중요한 데이터 유지
DAL
- LINQ를 통해 데이터에 액세스 할 때 IQueryable에 의존
- 리포지토리 패턴 활용
- Uber Profiler와 같은 쿼리 프로파일 링
- 쿼리에 대한 두 번째 레벨 캐시를 고려하고 그들에게 범위와 제한 시간 즉, 추가 NHibernate에 두 번째 캐시
부하 분산
-
리버스 프록시를 활용하여 앱 인스턴스에 클라이언트로드를 분산시킵니다. 스택 오버플로는 HAProxy ( MSDN )를 사용합니다.
-
사용 비동기 컨트롤러를 외부 자원 처리에 의존하는 작업을 구현합니다.
고객 입장에서
- 당신의 클라이언트 측 최적화와 같은 도구를 사용 YSlow에를 제안 성능을 개선 할 수
- AJAX를 사용하여 UI 구성 요소를 업데이트하십시오. 가능하면 전체 페이지 업데이트를 피하십시오.
- 시간 초과에 따른 재로드에 대한 컨텐츠 전달을 위해 펍 서브 아키텍처 (예 : 혜성)를 구현하는 것을 고려하십시오.
- 가능하면 차트 및 그래프 생성 로직을 클라이언트 측으로 이동하십시오. 그래프 생성은 값 비싼 활동입니다. 클라이언트 측에서 불필요한 부담으로 서버를 연기하고 새로운 요청 (예 : Flex charting, jqbargraph , MoreJqueryCharts ) 없이 로컬로 그래프 작업을 수행 할 수 있습니다 .
- 스크립트 및 미디어 컨텐츠에 CDN을 사용하여 클라이언트 측 (예 : Google CDN )의 로드를 향상시킵니다.
- 작게하다 – 컴파일 – 자바 스크립트 스크립트의 크기를 개선하기 위해
- 쿠키는 모든 요청에 따라 서버로 전송되므로 쿠키 크기를 작게 유지하십시오.
- 가능하면 DNS 및 링크 프리 페치 를 사용하십시오.
글로벌 구성
-
Razor를 사용하는 경우 기본적으로 global.asax.cs에 다음 코드를 추가하십시오. 기본적으로 Asp.Net MVC는 aspx 엔진 및 면도기 엔진으로 렌더링합니다. 이것은 RazorViewEngine 만 사용합니다.
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine()); -
web.config에 gzip (HTTP 압축) 및 정적 캐시 (이미지, CSS 등)를 추가하십시오
<system.webServer>
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/>
</system.webServer> - 사용하지 않는 HTTP 모듈 제거
- web.config에서 HTML을 생성하자마자 플러시하고 사용하지 않는 경우 viewstate를 비활성화하십시오.
<pages buffer="true" enableViewState="false">
답변
기본 제안은 REST 원칙 을 따르는 것이며 다음 요점은 이러한 원칙 중 일부를 ASP.NET MVC 프레임 워크에 연결합니다.
- 컨트롤러를 상태 비 저장 상태로 만듭니다. 이는 ‘ 웹 성능 / 확장 성’제안 (마이크로 / 머신 수준 성능과 반대) 및 향후 응용 프로그램에 영향을 미칠 주요 디자인 결정 (특히 인기가 있거나 필요한 경우) 예를 들어 내결함성.
- 세션을 사용하지 마십시오
- 세션을 사용하는 tempdata를 사용하지 마십시오
- 모든 것을 ‘미숙하게’ ‘캐시’하려고하지 마십시오.
- 양식 인증 사용
- 인증 티켓에 자주 액세스하는 중요한 데이터를 보관하십시오
- 자주 액세스하는 중요하지 않은 정보에 쿠키 사용
- 웹에서
리소스를 캐싱 가능하게 만들기
- JavaScript를 컴파일하십시오. 클로저 컴파일러 라이브러리 도 있습니다 ( 다른 것들이 있는지 확인하십시오 .’JavaScript 컴파일러 ‘ 도 검색 하십시오 )
- 특히 대용량 미디어 파일 등에 CDN (Content Delivery Network)을 사용하십시오.
- 파일, 키 / 값 저장소 등과 같은 데이터의 다른 유형의 저장소를 고려하십시오. SQL Server뿐만 아니라
- 마지막으로 웹 사이트의 성능을 테스트하십시오.
답변
코드 산악인 과 이 블로그 항목은 응용 프로그램의 성능을 향상 자세한 방법을 제공합니다.
컴파일 된 쿼리는 응용 프로그램의 성능을 향상 시키지만 ASP.NET MVC와 공통점이 없습니다. 모든 db 응용 프로그램의 속도를 높이므로 실제로 MVC는 아닙니다.
답변
이것은 명백해 보일 수 있지만 프로덕션 환경이나 성능 프로파일 링 중에는 디버그 모드가 아닌 릴리스 모드에서 사이트를 실행하십시오. 릴리스 모드가 훨씬 빠릅니다. 디버그 모드는 자체 코드에서 성능 문제를 숨길 수 있습니다.
답변
LINQ를 통해 데이터에 액세스 할 때 IQueryable에 의존합니다 …
List () 대신 AsQueryable ()을 사용하는 이유는 무엇입니까?
… 좋은 리포지토리 패턴을 활용하십시오.
이렇게하면 필요한 데이터 만로드되고 필요한 경우에만 데이터 액세스가 최적화됩니다.
답변
획기적인 최적화는 아니지만 jQuery 등에 CDN을 사용하십시오 .
ScottGu 자신의 인용문 : Microsoft Ajax CDN을 사용하면 ASP.NET AJAX 또는 jQuery를 사용하는 ASP.NET Web Forms 및 ASP.NET MVC 응용 프로그램의 성능을 크게 향상시킬 수 있습니다. 이 서비스는 무료로 제공되며 등록이 필요하지 않으며 상업 및 비상업적 목적으로 모두 사용할 수 있습니다.
jQuery를 사용하는 Moss의 웹 파트에 CDN도 사용합니다.
답변
또한 NHibernate 를 사용하는 경우 조회를 위해 2 차 레벨 캐시를 켜고 설정하고 조회 범위 및 시간 종료에 추가 할 수 있습니다. 그리고 EF , L2S 및 NHibernate ( http://hibernatingrhinos.com/products/UberProf)에 대한 킥 엉덩이 프로파일 러가 있습니다. 쿼리를 조정하는 데 도움이됩니다.