[.net] ASP.NET MVC 응용 프로그램 성능을 개선하려면 어떻게합니까?

ASP.NET MVC 응용 프로그램 성능을 어떻게 개선합니까?



답변

가능한 개선 소스 목록은 다음과 같습니다.

일반

  • 프로파일 러를 사용하여 응용 프로그램의 메모리 누수 및 성능 문제를 발견하십시오. 개인적으로 나는 dotTrace를 제안합니다
  • 프로덕션 환경이나 성능 프로파일 링 중에는 디버그 모드가 아닌 릴리스 모드로 사이트를 실행하십시오. 릴리스 모드가 훨씬 빠릅니다. 디버그 모드는 자체 코드에서 성능 문제를 숨길 수 있습니다.

캐싱

  • CompiledQuery.Compile()
    쿼리 표현식의 재 컴파일을 피하면서 재귀 적으로 사용
  • OutputCacheAttribute
    불필요하고 행동적인 실행을 저장하기 위해 사용 하기 쉬운 변경하지 않는 컨텐츠 캐시
  • 자주 액세스하는 중요하지 않은 정보에 쿠키 사용
  • ETag 및 만료 활용 – ActionResult필요한 경우 사용자 정의 방법 작성
  • 를 사용 RouteName하여 경로를 구성한 다음이를 사용하여 링크를 생성하고 표현식 트리 기반 ActionLink 메소드를 사용하지 마십시오.
  • 경로 확인 캐싱 전략 구현 고려
  • 에 반복적 인 코드를 넣고 xxxxPartialViews렌더링하지 마십시오 . 동일한 뷰에서 동일한 부분을 300 번 호출하면 문제가있을 수 있습니다. 설명 및 벤치 마크

라우팅

보안

  • 양식 인증 사용, 인증 티켓에 자주 액세스하는 중요한 데이터 유지

DAL

부하 분산

  • 리버스 프록시를 활용하여 앱 인스턴스에 클라이언트로드를 분산시킵니다. 스택 오버플로는 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 프레임 워크에 연결합니다.

  1. 컨트롤러를 상태 비 저장 상태로 만듭니다. 이는 ‘ 성능 / 확장 성’제안 (마이크로 / 머신 수준 성능과 반대) 및 향후 응용 프로그램에 영향을 미칠 주요 디자인 결정 (특히 인기가 있거나 필요한 경우) 예를 들어 내결함성.
    • 세션을 사용하지 마십시오
    • 세션을 사용하는 tempdata를 사용하지 마십시오
    • 모든 것을 ‘미숙하게’ ‘캐시’하려고하지 마십시오.
  2. 양식 인증 사용
    • 인증 티켓에 자주 액세스하는 중요한 데이터를 보관하십시오
  3. 자주 액세스하는 중요하지 않은 정보에 쿠키 사용
  4. 웹에서

    리소스를 캐싱 가능하게 만들기

  5. JavaScript를 컴파일하십시오. 클로저 컴파일러 라이브러리 도 있습니다 ( 다른 것들이 있는지 확인하십시오 .’JavaScript 컴파일러 ‘검색 하십시오 )
  6. 특히 대용량 미디어 파일 등에 CDN (Content Delivery Network)을 사용하십시오.
  7. 파일, 키 / 값 저장소 등과 같은 데이터의 다른 유형의 저장소를 고려하십시오. SQL Server뿐만 아니라
  8. 마지막으로 웹 사이트의 성능을 테스트하십시오.

답변

코드 산악인이 블로그 항목은 응용 프로그램의 성능을 향상 자세한 방법을 제공합니다.

컴파일 된 쿼리는 응용 프로그램의 성능을 향상 시키지만 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)에 대한 킥 엉덩이 프로파일 러가 있습니다. 쿼리를 조정하는 데 도움이됩니다.