ASP.NET MVC 성능


102

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

이것은 ASP.NET WebForms에서 ASP.NET MVC로 이동하는 것을 고려하는 데 도움이됩니다.


20
WebForms가 출시 된 이후로 작업 한 후에는 결코 기꺼이 돌아 가지 않을 것입니다! MVC가 내 <3을 훔쳤습니다.이 사이트는 Beta 5에서 훌륭하게 실행되고 있습니다!
Jarrod Dixon

2
이 질문에 대한 모든 개정 롤백은 무엇입니까 ..?
Nick

@Nick : OP가 편집 내용을 롤백하고 설명하는 주석을 삭제합니다.
GEOCHET

@Rich B : 맞습니다. 그는 내 댓글 중 약 5 개를 삭제했습니다.
조지 스토커

2
MVC3 릴리스에 가까워지고 있으므로 지금 업데이트가 필요합니다.
Andrew Lewis

답변:


69

결론을 내리는 데 필요한 유형의 확장 성 및 성능 테스트를 수행하지 않았습니다. ScottGu가 잠재적 인 성능 목표에 대해 논의하고 있었던 것 같습니다. 베타 및 RTM으로 이동함에 따라 내부적으로 더 많은 성능 테스트를 수행 할 것입니다. 그러나 성능 테스트 결과 게시에 대한 Google 정책이 무엇인지 잘 모르겠습니다.

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


13
MVC가 출시되었으므로 성능 결과를 공개하는 데 대한 업데이트가 있습니까?
chris

6
전에 5,999 개의 반복 점수가 내 눈을 아프게했기 때문에 투표했습니다. (
Damien

2
이 때 쯤이면 반드시 숫자가 있어야합니다. 답변을 업데이트 하시겠습니까? 아니면 성가신 정책이 그것을 금지한다는 것을 알았습니까?
tvanfosson

7
숫자는 42입니다. :) 일반적으로 우리의 숫자는 실제 앱에 쓸모가 없을 것이므로 원칙적으로 제공하지 않습니다. 그러나 Microsoft의 다른 팀이 유리한 숫자를 보여주는 대규모 웹 사이트를 구축하는 것을 알고 있습니다. 즉, 성능 문제는 프레임 워크의 상속 문제보다 프로그래머의 실수로 인한 것일 가능성이 더 큽니다. 일반적으로 데이터베이스 및 외부 서비스와의 상호 작용이 범인입니다. :)
Haacked

진실! 이것을 업데이트하십시오! 벤치 마크가 아니라 간단한 아이디어 일 수 있습니다. 그들은 동등합니까 아니면 mvc가 성능에 대해 조금 더 나은가요?
gideon dec

48

A) WebForms 응용 프로그램을 구현하는 방법 및 B)에 따라 달라지기 때문에 이것은 확실히 대답하기 어려운 질문이 될 것이라고 생각합니다. 을 구현하는 방법 MVC 응용 프로그램을 구현하는 방법 합니다. "원시"형태에서 MVC는 WebForms보다 빠를 가능성이 있지만 수년 및 수년간의 도구와 경험을 통해 빠른 WebForms 응용 프로그램을 구축하기위한 여러 기술을 만들어 냈습니다. 저는 선임 ASP.NET 개발자가 MVC 응용 프로그램의 속도에 필적하는 WebForms 응용 프로그램을 만들거나 최소한 무시할만한 차이를 얻을 수 있다고 확신합니다.

@tvanfosson이 제안한 실제 차이점 은 테스트 가능성과 깨끗한 SoC입니다. 성능 향상이 가장 큰 관심사라면 WebForms로 이동하여 MVC에서 재 구축을 시작하는 것이 큰 이유가 아니라고 생각합니다. 적어도 WebForms를 최적화하기 위해 사용 가능한 기술을 시도 할 때까지는 아닙니다.


훌륭한 답변 Todd (개발자 전도사가 실제로 실용적인 반응을 보이는 것이 얼마나 놀라운가). 당신이 틀린 유일한 것은 원시 구현 웹 양식이 실제로 훨씬 빠르다는 것입니다.
Chris Marisic 2013

42

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

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


31
당신은 너무 MVC 않고 성가신 대형 viewstate가 있음을 해결 한 수
안드레이 Rînea

1
단지의 ViewState는 페이지 수준 @ 떨어져 Web.config 또는 turnd 수 있습니다 정교합니다
bbqchickenrobot

8
그렇습니다.하지만 mvc에서는 백본을 제거하여 웹 양식을 "잘못 작동"하도록함으로써 웹 양식에서 작업한다고 주장하는 모든 컨트롤과 공급 업체를 강제로 떠나도록하는 디자인 결정이 아닌 정상적인 기본값입니다. 해당 페이지를 다시 코딩 할 수 있다는 데 동의하지 않지만 전체 앱은 viewstate없이 더 좋았습니다.
DevelopingChris

그렇다면 web.config에서 viewstate를 끄는 것보다 전체 앱을 MVC로 이식하는 것이 최악의 결정이라고 생각하지 않습니까? 아니요, viewstate는 백본이 아닙니다. 조사한 경우에만 viewstate는 세션뿐만 아니라 캐시에 보관 될 수 있습니다.
Simple Fellow

29

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

이 기사는 이러한 많은 학대를 이해하는 데 도움이되지 않았습니다. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

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


14

내 테스트는 MVC에서 초당 2 배에서 7 배 더 많은 요청을 보여 주지만 웹 양식 앱을 빌드하는 방법에 따라 다릅니다. 서버 측 제어없이 "hello world"텍스트 만 있으면 mvc가 약 30-50 % 더 빠릅니다.


12

나에게 MVC의 진정한 "성능"향상은 응용 프로그램의 테스트 가능한 표면을 증가시키는 것입니다. WebForms에는 테스트하기 어려운 많은 응용 프로그램이있었습니다. MVC를 사용하면 테스트 할 수있는 코드의 양이 기본적으로 두 배가됩니다. 기본적으로 쉽게 테스트 할 수없는 것은 레이아웃을 생성하는 코드뿐입니다. 뷰에 사용 된 실제 데이터를 채우는 로직을 포함하여 모든 비즈니스 로직 및 데이터 액세스 로직을 이제 테스트 할 수 있습니다. 더 성능이 좋을 것으로 기대하지만 페이지 수명주기가 크게 단순화되고 웹 프로그래밍에 더 잘 적용됩니다.


누군가가이 답변에 반대하는 이유를 알고 싶습니다.
tvanfosson

제 생각에는 잘 설계된 ASP.NET 웹 양식 응용 프로그램이 MVC 응용 프로그램만큼 테스트 가능하기 때문에 투표가 거부 될 수 있다는 것입니다. 두 가지를 모두 개발 한 저의 경험은 MVC가 당신을 깨끗한 프로그래밍 모델 (가장 큰 강점 중 하나 인 IMO)으로 강요한다는 것입니다. 웹 양식을 사용하면 더 게으른 작업을 수행 할 수 있지만 웹 양식에서 동일한 테스트 가능한 표면을 가질 수는 있습니다. 어쨌든 내 생각이다.
dudemonkey

Razor 뷰는 말 그대로 뷰 내부에 코드를 포함하도록 권장합니다. 이는 테스트 할 수 없으며 우려 사항을 분리하는 데 좋은 징조가 아닙니다. MVC가 당신이 컨트롤러를 작성하게 만든다고해서 당신이 무엇을하고 있는지 모른다고해서 모든 것을 망칠 수 없다는 의미는 아닙니다. 숙련 된 개발자는 MVC보다 WebForms에서 (또는 그 이상) 성능을 얻을 수 있으며 사실상 동일한 "테스트 가능한 표면"을 갖게됩니다.
Richard Hauer

@RichardHauer는 내가 이것을 썼을 때 말 그대로 사실이 아니었지만 개선되었습니다. WebForms는 .NET Core에서 미래가없는 것 같기 때문에 논란의 여지가있는 것 같습니다.
tvanfosson

@tvanfosson 동의했습니다-지금 문제입니다. 어떤 부분이 사실이 아니라고 생각하는지 확실하지 않습니다. "문자 그대로"사용하는 것에 반대하십니까? 어쨌든, TagHelpers가 포함 된 MVC의 최신 버전은 코드를 레이아웃에 넣는 습관을 없애는 데 도움이되며 결국 모든 것이 작동하게됩니다. 물론이 게시물은 꽤 오래되었지만 당시에도 잘 구성된 WebForms 양식은 MVC의 "매직 와이어 링"과 뷰에 코드가 전혀 포함되지 않은 상태에서 매우 빠릅니다.
Richard Hauer

7

여기서 문제는 ASP.Net MVC가 이전 웹 양식보다 얼마나 빠르더라도 차이를 만들지 않을 것입니다. 대부분의 시간이 데이터베이스에 있기 때문입니다. 대부분의 경우 웹 서버는 데이터베이스 서버에서 대기하는 것만으로도 CPU 사용량이 0 ~ 10 %입니다. 웹 사이트에서 매우 많은 수의 히트가 발생하고 데이터베이스가 매우 빠르지 않으면 큰 차이를 느끼지 못할 것입니다.


사용자는 viewstate가 없을 수 있습니다.
UpTheCreek

6

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

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

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

아마도 Jeff와 그의 팀은이 사이트의 개발에 대한 힌트를 줄 수 있습니다.


3

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

메트릭은 http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db에서 사용할 수 있습니다 .

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

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


2

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


2

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

나는 뷰 상태를 싫어하고 ASP.NET 측면에서 모든 악의 근원이라고 생각합니다. 이것이 내가 그것을 사용하지 않는 이유이며 완벽하게 솔직히 당신은 왜 그렇게 하시겠습니까?

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

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

글을 쓸 때 군대를 인스턴스화하는 것입니다 ... 기다리지 마세요. 뷰 렌더링에 참여할 개체 군단입니다. 이것은 ASPX 페이지 자체에서 최소한의 동작을 표현할 때보 다 느려질 것입니다. (Visual Studio의 ASPX 페이지에 대한 지원이 괜찮 기 때문에 뷰 엔진 추상화에 대해서는 신경 쓰지 않지만, WebForms를 개념으로 완전히 삭제했으며 코드가 부풀거나 내 응용 프로그램을 연결하는 것).

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

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

나는 더 많은 사람들이 이것을 시도하도록 권장합니다.


2
그래서 이것은 질문에 대한 직접적인 대답이 아닙니다. 그러나 그것은 관련이 있으며 몇 가지 좋은 점을 만듭니다. 하지만 이건 제가 필요로하는 제품이고 저에게 완벽하게 어울립니다. 나는 또한 그 이유를 이해하는 사람이 거의 없더라도 내 아이디어를 공유하는 것을 좋아합니다.
John Leidegren

1
글쎄, 당신은 당신의 투표를 변경할 필요는 없지만 '그'답이 아니기 때문에 그것에 반대 투표를 할 필요는 없습니다. 텍스트를 잠시 살펴보면 ASP.NET MVC가 WebForms보다 빠르다는 점과 그 이유가 몇 가지 있습니다. 그리고 그것은 리플렉션과 객체 모델, WebForms의 ViewState 오버 헤드와 같은 것들로 귀결됩니다.
John Leidegren

@John-이제 MVC2가 개선 된 모델 바인딩, 유효성 검사, 강력한 형식의 도우미 등으로 나왔으므로 방법과 비교하여 어떻게 평가할까요?
tvanfosson

MVC2는 훨씬 낫습니다. 당시 제가 구축하고 있던 것을 거의 대체했다고 생각합니다 (베타에서 MVC1로). 기존 도구를 선택하지 않고 ASP.NET을 기반으로 구축하려고했던 것과 관련하여 상당한 시련을 겪었습니다. 나는 많은 것을 배웠고 결국 이것을 생산에 도입했습니다. 이제 현재의 도구 / 프레임 워크 (VS / ASP.NET / C #)가이 작업에 적합하지 않다는 것을 알고 있으며 결국이 길을 가고 싶다면 자체 컴파일러 / 모델 검사에 투자해야합니다. 어떤 일이 당신에게 유리하게 작용할 것입니다.
John Leidegren

당시에는 ASP.NET MVC에 대해 많이 생각하지 않았습니다. 내가 원했던 것들이 부족했습니다. 그러나 저는 이러한 것들을 개발하고 테스트하고 파악하는 데 많은 시간을 소비해야했습니다. 나는 여전히 내가 구축하고있는 웹 프레임 워크의 정적 측면이 그 점에서 MVC보다 우수하다고 생각하지만 C # 컴파일러는 그 문제를 해결하는 데 비효율적입니다. 메타 프로그래밍과 관련하여 더 큰 유연성을 허용하는 언어 / 컴파일러가 필요합니다. 런타임에 많은 작업을 수행해야했고 컴파일 된 인스턴스를 캐시하는 것이 불가능한 경우가 많았 기 때문에 동적으로 많은 것을 재 컴파일해야했습니다.
John Leidegren

2

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

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

여기에 이미지 설명 입력

MVC4

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

여기에 이미지 설명 입력

WebForms (aspx)

  • 2500rps 이상을 얻을 수 있습니다.

  • 성능 킬러는 MVC Bata 또는 RC의 버그라는 사실이 밝혀졌습니다. 그리고 번들을 제거하면 성능이 향상됩니다. 이제 최신 버전이이 문제를 해결했습니다.


1

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

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

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

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

이 템플릿 " Neos-SDI MVC 템플릿 "을 살펴보면 기본적으로 많은 성능 향상이있는 깨끗한 아키텍처를 만들 수 있습니다 ( MvcTemplate 웹 사이트 확인 ).


-1

여기에 이미지 설명 입력

몇 가지 기본 코드로 소규모 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 등으로 게시됩니다.


테스트 방법이 나쁘고 편향이 심하며 결론이 유효하지 않습니다. 적절하게 구축 된 WebForms 애플리케이션은 테스트가 가능하고 문제를 적절하게 분리하며 페이로드 오버 헤드를 최소화합니다. MVC에는 페이지 수명주기 이벤트 루프가 없지만 경쟁 할 라우팅 및보기 실행이 있습니다. CP에 대한이 주제에 대한 귀하의 기사는 심하게 편향되어 있습니다.
Richard Hauer

최악의 기술에서도 적절하고 신중하게 구축 된 애플리케이션은 기적을 일으킬 것입니다. ASP.NET 페이지 수명주기는 HTML UI 생성을 처리하므로 라우팅 및보기 실행에 비해 확실히 더 많은 페이로드를 가지고 있습니다. 라우팅은 ASP.NET 프레임 워크의 일부이므로 일반 웹 양식에도 존재합니다. 성능 뒤에 코드를 작성하지 않으면 동의하는 한 가지는 MVC와 동일하지만 Webform 도구 상자는 코드 뒤에있는 코드가 필수적인 부분이 될 정도로 유혹적입니다. MVC에서는 그렇게 할 수 없습니다. 나는 면도기에서 디자인 뷰와 코드를 비활성화하는 방법을 좋아합니다.
Shivprasad Koirala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.