문제

ASP.NET MVC가 ASP.NET WebForms보다 30배 빠르다는 말도 안 되는 말을 발견했습니다.실제 성능 차이는 무엇이며, 이것이 측정되었으며 성능상의 이점은 무엇입니까?

이는 ASP.NET WebForms에서 ASP.NET MVC로의 전환을 고려하는 데 도움이 됩니다.

도움이 되었습니까?

해결책

결론을 도출하는 데 필요한 확장성 및 성능 테스트를 수행하지 않았습니다.ScottGu가 잠재적인 성능 목표를 논의한 것 같습니다.베타 및 RTM으로 전환하면서 내부적으로 더 많은 성능 테스트를 수행할 예정입니다.그러나 성능 테스트 결과를 게시하는 것에 대한 우리의 정책이 무엇인지 잘 모르겠습니다.

어쨌든 이러한 테스트에서는 실제 응용 프로그램을 고려해야 합니다...

다른 팁

많은 부분이 좌우되기 때문에 확실히 대답하기 어려운 질문이 될 것 같습니다. ㅏ) WebForms 애플리케이션을 구현하는 방법 비) MVC 애플리케이션을 구현하는 방법."원시" 형식에서 MVC는 WebForms보다 빠르지만 수년간의 도구와 경험을 통해 빠른 WebForms 애플리케이션을 구축하기 위한 다양한 기술이 탄생했습니다.저는 수석 ASP.NET 개발자가 MVC 응용 프로그램의 속도에 필적하는 WebForms 응용 프로그램을 만들 수 있거나 최소한 무시할 수 있는 차이를 얻을 수 있다고 확신합니다.

진짜 차이점은- @tvanfosson이 제안한대로- 테스트 가능하고 SoC가 깨끗합니다.성능 향상이 주요 관심사라면 WebForms로 전환하고 MVC에서 재구축을 시작할 큰 이유는 아니라고 생각합니다.최소한 WebForms 최적화에 사용 가능한 기술을 사용해 보기 전까지는 그렇지 않습니다.

viewstate를 제거하고 제출된 출력을 프로그래밍 방식으로 처리할 수 있게 함으로써 내 페이지 중 하나를 2MB 페이로드에서 200k로 줄였습니다.

처리가 동일하더라도 크기만으로도 초당 연결 및 요청 속도가 크게 향상됩니다.

WebForms가 본질적으로 느리거나 리소스 집약적이라고 생각하는 많은 사람들이 잘못된 위치에 비난을 돌리고 있다고 생각합니다.웹 양식 앱을 최적화하기 위해 10번 중 9번은 앱 작성자가 viewstate의 목적을 오해하는 곳이 너무 많습니다.viewstate가 완벽하다고 말하는 것은 아니지만 이를 남용하기가 너무 쉽고 이러한 남용으로 인해 viewstate 필드가 비대해집니다.

이 기사는 이러한 학대 중 많은 부분을 이해하는 데 도움이 되는 귀중한 자료였습니다. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

MVC와 WebForms를 효과적으로 비교하려면 두 앱 모두 아키텍처를 올바르게 사용하고 있는지 확인해야 합니다.

내 테스트에서는 MVC에서 요청/초가 2배에서 7배 더 많은 것으로 나타났지만 이는 웹 양식 앱을 구축하는 방법에 따라 다릅니다.서버 측 제어 없이 "hello world" 텍스트만 있으면 mvc가 약 30-50% 더 빠릅니다.

나에게 있어 MVC의 진정한 "성능" 향상은 애플리케이션의 테스트 가능한 표면이 늘어난 것입니다.WebForms에는 테스트하기 어려운 애플리케이션이 많았습니다.MVC를 사용하면 기본적으로 테스트 가능한 코드의 양이 두 배로 늘어납니다.기본적으로 쉽게 테스트할 수 없는 것은 레이아웃을 생성하는 코드뿐입니다.보기에 사용된 실제 데이터를 채우는 논리를 포함하여 모든 비즈니스 논리와 데이터 액세스 논리를 이제 테스트할 수 있습니다.성능도 더 좋을 것으로 기대하지만 페이지 수명 주기가 크게 단순화되고 웹 프로그래밍에 더 적합합니다. 동일하거나 조금 느리더라도 품질 관점에서 전환할 가치가 있습니다.

여기서 문제는 ASP.Net MVC가 이전 웹 양식보다 아무리 빠르더라도 차이가 없다는 것입니다. 왜냐하면 대부분의 시간이 데이터베이스에 있기 때문입니다.대부분의 경우 웹 서버는 데이터베이스 서버를 기다리는 동안 CPU 사용량이 0-10%에 머물게 됩니다.귀하의 웹 사이트에 매우 많은 조회수가 발생하거나 데이터베이스가 매우 빠르지 않는 한, 아마도 큰 차이를 느끼지 못할 것입니다.

초기 ASP.NET MVC 개발에서 찾을 수 있는 유일한 구체적인 숫자는 이 포럼 스레드에 있습니다.

http://forums.asp.net/p/1231621/2224136.aspx

Rob Connery 자신도 ScottGu가 ASP.NET MVC가 초당 8000개의 요청을 처리할 수 있다고 주장했다는 진술을 어느 정도 확인했습니다.

아마도 Jeff와 그의 동료들은 이 사이트의 개발로부터 어떤 종류의 힌트를 줄 수 있을 것입니다.

받아들여진 의견과는 달리, 최적화된 웹 양식 사용은 원시 성능 측면에서 MVC를 완전히 죽입니다.Webforms는 MVC보다 훨씬 오랫동안 HTML을 제공하는 작업에 최적화되었습니다.

측정항목은 다음에서 사용할 수 있습니다. http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

모든 단일 비교 mvc는 목록의 하위-중간/하위-상위 순위에 있는 반면, 최적화된 웹 양식 사용은 상위-중간/상위-하위 순위에 있습니다.

일화적이지만 이러한 지표에 대한 매우 심각한 검증입니다. www.microsoft.com MVC가 아닌 웹 양식에서 제공됩니다.경험적으로 더 빠르다면 MVC를 선택하지 않았을 것이라고 생각하는 사람이 있습니까?

이건 정말 답할 길이 없습니다.MVC는 기본적으로 Web Forms 보기 엔진을 사용하고 사용자 정의 보기 엔진을 원하는 수만큼 사용하도록 구성할 수 있으므로 성능 비교를 원할 경우 더 구체적이어야 합니다.

저는 약 1년 전에 MVC에서 일을 시작했는데 영감을 받았지만 감동을 받지는 못했습니다.

저는 뷰 상태를 싫어하며 이를 ASP.NET 측면에서 모든 악의 근원으로 봅니다.이것이 제가 그것을 사용하지 않는 이유이며, 솔직히 말해서 왜 사용하시겠습니까?

저는 기본적으로 ASP.NET MVC Framework 개념을 가져와서 제 방식대로 구축했습니다.그래도 몇 가지를 바꿨습니다.동적 재컴파일을 중심으로 컨트롤러 래핑 코드 또는 URL 라우팅 코드를 작성했습니다.

이제 ASP.NET MVC 응용 프로그램은 사용 방법에 따라 더 빨라질 것이라고 말하고 싶습니다.WebForms를 완전히 포기하면 ASP.NET 수명 주기와 개체 모델이 엄청나기 때문에 속도가 더 빨라질 것입니다.

당신이 글을 쓸 때 당신은 군대를 예시하는 것입니다 ...잠깐만요. 뷰 렌더링에 참여할 수많은 객체입니다.ASPX 페이지 자체에서 최소한의 동작을 표현하는 경우보다 속도가 느려집니다.(Visual Studio의 ASPX 페이지에 대한 지원이 괜찮기 때문에 뷰 엔진 추상화에는 관심이 없지만 코드 부풀림이나 변경할 수 없는 문제로 인해 WebForms를 개념으로 완전히 삭제하고 기본적으로 모든 ASP.NET 프레임워크를 삭제했습니다. 내 응용 프로그램을 연결하는 것).

필요할 때마다 특수 목적 개체와 코드를 내보내기 위해 동적 재컴파일(System.Reflection.Emit)을 사용하는 방법을 찾았습니다.이 코드의 실행은 리플렉션보다 빠르지만 처음에는 리플렉션 서비스를 통해 구축되었습니다.이로 인해 내 MVC 기반 프레임워크는 뛰어난 성능을 제공할 뿐만 아니라 매우 정적으로 유형화되었습니다.저는 문자열과 이름/값 쌍 컬렉션을 사용하지 않습니다.대신 내 사용자 정의 컴파일러 서비스는 참조 유형이 전달되는 컨트롤러 작업에 대한 양식 게시물을 다시 작성합니다.그 이면에는 많은 일이 진행되고 있지만 이 코드는 빠르고 WebForms나 MVC Framework보다 훨씬 빠릅니다.

또한 저는 URL을 작성하지 않고 나중에 호출할 컨트롤러 작업을 알려주는 URL로 변환되는 람다 식을 작성합니다.이것은 특별히 빠르지는 않지만 깨진 URL을 갖는 것보다 낫습니다.이는 정적으로 유형이 지정된 개체뿐만 아니라 정적으로 유형이 지정된 리소스도 있는 것과 같습니다.정적으로 유형이 지정된 웹 애플리케이션이요?그것이 내가 원하는 것입니다!

나는 더 많은 사람들이 이것을 시도해 보도록 권장하고 싶습니다.

Visual Studio로 만든 프로젝트입니다.하나는 mvc4 템플릿이고 다른 하나는 WebForm(전통적)입니다.그리고 WCAT로 부하 테스트를 해보면 이런 결과가 나옵니다.

MVC4는 WebForms보다 상당히 느립니다. 어떤 아이디어가 있습니까?

enter image description here

MVC4

  • 약 11rps를 얻을 수 있습니다
  • rps는 2-cpu 또는 4-cpu 서버 모두 매우 낮습니다.

enter image description here

웹양식(aspx)

  • 2500rps를 넘을 수도 있어요

  • 성능 킬러는 MVC Bata 또는 RC의 버그라는 것이 밝혀졌습니다.그리고 번들 항목을 제거하면 성능이 향상됩니다.이제 최신 버전에서는 이 문제가 해결되었습니다.

성능은 수행하는 작업에 따라 다릅니다.일반적으로 MVC는 Viewstate가 없고 MVC가 기본적으로 Postback보다 Callback에서 더 많이 작동하기 때문에 asp.net보다 빠릅니다.

웹 양식 페이지를 최적화하면 MVC와 동일한 성능을 얻을 수 있지만 많은 작업이 필요합니다.

또한 CSS와 자바스크립트를 결합 및 축소하고 이미지를 그룹화하여 스프라이트로 사용하는 등 웹 사이트 성능을 향상하는 데 도움이 되는 MVC(및 Webform)용 너겟이 많이 있습니다.

웹사이트의 성능은 아키텍처에 따라 크게 달라집니다.관심사를 잘 분리한 깔끔한 코드는 더욱 깔끔한 코드와 성능 향상 방법에 대한 더 나은 아이디어를 제공합니다.

이 템플릿을 살펴볼 수 있습니다. "Neos-SDI MVC 템플릿"를 사용하면 기본적으로 많은 성능 개선이 포함된 깔끔한 아키텍처가 생성됩니다(확인 Mvc템플릿 웹사이트).

enter image description here

몇 가지 기본 코드를 사용하여 소규모 VSTS 로드 테스트 실험을 수행한 결과 ASP.NET MVC 응답 시간이 ASP.NET Webforms에 비해 두 배 더 빠른 것으로 나타났습니다.위에는 플롯이 포함된 그래프가 첨부되어 있습니다.

이 CP 문서에서 이 부하 테스트 실험을 자세히 읽을 수 있습니다. https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

테스트는 VSTS 및 telerik 부하 테스트 소프트웨어를 사용하여 아래 사양으로 수행되었습니다.

사용자는 25명의 사용자를 로드합니다.

테스트 실행 시간은 10분이었습니다.

머신 구성 DELL 8GB Ram, Core i3

프로젝트는 IIS 8에서 호스팅되었습니다.

프로젝트는 MVC 5를 사용하여 생성되었습니다.

네트워크 LAN 연결이 가정되었습니다.따라서 이 테스트에서는 현재 네트워크 지연을 고려하지 않습니다.

테스트 브라우저는 Chrome과 Internet Explorer를 선택했습니다.

테스트 중에 알 수 없는 이벤트의 평균을 계산하기 위해 여러 번 판독합니다.7개의 판독값과 모든 판독값은 이 기사에 1, 2 등의 판독값으로 게시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top