ASP.NET MVC Performansı


102

ASP.NET MVC'nin ASP.NET WebForms'tan 30 kat daha hızlı olduğuna dair bazı çılgınca açıklamalar buldum. Orada gerçek performans farkı nedir, bu ölçüldü mü ve performans avantajları nelerdir?

Bu, ASP.NET WebForms'tan ASP.NET MVC'ye geçmeyi düşünmeme yardımcı olmak içindir.


20
Çıktıklarından beri WebForms ile çalıştıktan sonra asla isteyerek geri dönmeyeceğim! MVC <3'ümü çaldı - ve bu site Beta 5'de harika çalışıyor!
Jarrod Dixon

2
Bu sorudaki tüm revizyon geri dönüşleri nedir ..?
Nick

@Nick: OP, düzenlemelerden herhangi birini geri alıyor ve bunları açıklayan yorumları siliyor.
GEOCHET

@Rich B: Doğru, yaklaşık 5 yorumumu sildi.
George Stocker

2
MVC3 sürümüne yaklaştığımıza göre bir güncellemeye ihtiyacımız var.
Andrew Lewis

Yanıtlar:


69

Herhangi bir sonuca varmak için gerekli olan ölçeklenebilirlik ve mükemmel testler yapmadık. Sanırım ScottGu potansiyel performans hedeflerini tartışıyor olabilir. Beta ve RTM'ye doğru ilerlerken, dahili olarak daha mükemmel testler yapıyor olacağız. Ancak, mükemmel testlerin sonuçlarını yayınlama konusundaki politikamızın ne olduğundan emin değilim.

Her durumda, bu tür testlerin gerçekten gerçek dünya uygulamalarını dikkate alması gerekir ...


13
Şimdi MVC piyasaya sürüldüğüne göre, performans sonuçlarının yayınlanmasıyla ilgili herhangi bir güncelleme var mı?
chris

6
Sadece buna oy veriyorum çünkü önceki 5,999 temsilci puanı gözlerimi acıtıyordu :(
Damien

2
Bu zamana kadar, mutlaka bazı numaralara sahip olmalısınız. Cevabınızı güncellemek ister misiniz? Yoksa sinir bozucu politikanın bunu yasakladığını mı gördünüz?
tvanfosson

7
Sayı 42. :) Genel olarak, sayılarımız gerçek dünyadaki uygulamalar için muhtemelen yararsız olacaktır, bu yüzden kural olarak onları vermeyiz. Bununla birlikte, Microsoft'ta olumlu rakamlar gösteren büyük ölçekli web siteleri oluşturan başka ekipler tanıyorum. Başka bir deyişle, herhangi bir performans sorunu, çerçevedeki miras sorunlarından daha çok programcı hatalarından kaynaklanacaktır. Genellikle suçlular veri tabanı ve harici hizmetler ile etkileşimlerdir. :)
Haacked

Doğru! Lütfen bunu güncelleyin! Belki kıyaslamalar değil, kısa bir fikir, eşitler mi yoksa mvc performans açısından biraz daha mı iyi?
gideon

48

Bence bu, A) WebForms uygulamasını nasıl uyguladığınıza ve B) MVC uygulamasını nasıl uyguladığınıza bağlı olacağından, kesin olarak yanıtlaması zor bir soru olacak . MVC, "ham" formlarında muhtemelen WebForms'tan daha hızlıdır, ancak yıllarca süren araçlar ve deneyim, hızlı WebForms uygulamaları oluşturmak için bir dizi teknik üretti. Kıdemli bir ASP.NET geliştiricisinin, herhangi bir MVC uygulamasının hızına rakip olan veya en azından ihmal edilebilir bir fark yaratan bir WebForms uygulaması üretebileceğine bahse girerim.

@Tvanfosson'un önerdiği gibi gerçek fark , test edilebilirlik ve temiz SoC'dir . Performansı iyileştirmek başlıca endişenizse, bunun WebForms'a atlayıp MVC'de yeniden inşa etmeye başlamak için harika bir neden olduğunu düşünmüyorum. En azından WebForms'u optimize etmek için mevcut teknikleri deneyene kadar.


Harika cevap Todd (bir geliştirici evangelistinin gerçekte pragmatik bir tepkiye sahip olması ne kadar şaşırtıcı). Yanlış yaptığınız tek şey, ham uygulamalar web formunda gerçekten önemli ölçüde daha hızlıdır.
Chris Marisic

42

Sayfalarımdan birini 2MB yükten 200k'ye düşürdü, sadece görüntü durumunu ortadan kaldırarak ve gönderilen çıktıyla programatik olarak çalışmasını katlanılabilir hale getirerek.

Tek başına boyut, işleme aynı olsa bile, saniye başına bağlantılarda ve isteklerin hızında büyük gelişmeler yaratacaktır.


31
MVC olmadan da bu sinir bozucu geniş
görüntü durumunu düzeltebilirdiniz

1
ViewState, sayfa düzeyinde veya web.config'de
kapatılabilir

8
evet, ancak mvc'de bu mantıklı bir varsayılan, sizi tüm denetimleri ve yalnızca web formları üzerinde çalıştığını iddia eden satıcıları web formlarını arka kemiğini kaldırarak "yanlış davranmaya" bırakmaya zorlayan bir tasarım kararı değildir. Sadece o sayfayı yeniden kodlayabileceğinize katılmıyorum, ancak tüm uygulama viewstate olmadan daha iyiydi.
DevelopingChris

o zaman web.config'deki görünüm durumunu kapatmak yerine tüm uygulamayı MVC'ye taşımanın en kötü kararınız olduğunu düşünmüyor musunuz? ve hayır, görünüm durumu belkemiği değildir. yalnızca araştırma yaptıysanız, viewstate oturumların yanı sıra önbellekte de tutulabilir.
Basit Fellow

29

WebForms'un doğası gereği yavaş veya kaynak yoğun olduğunu düşünen pek çok kişinin suçu yanlış yere attığını düşünüyorum. Bir web formu uygulamasını optimize etmem için getirildiğimde 10 üzerinden 9'u, uygulama yazarlarının görünüm durumunun amacını yanlış anladığı çok fazla yer var. Görüş durumunun mükemmel olduğunu ya da herhangi bir şey olduğunu söylemiyorum, ancak onu kötüye kullanmanın YOLU çok kolay ve şişirilmiş görüş durumu alanına neden olan bu kötüye kullanım.

Bu makale, bu suistimallerin çoğunu anlamama yardımcı olması açısından paha biçilemezdi. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

MVC ve WebForms arasında geçerli bir karşılaştırma yapmak için, her iki uygulamanın da mimarileri doğru şekilde kullandığından emin olmamız gerekir.


14

Testim, MVC'de 2x ile 7x daha fazla istek / saniye arasında bir şey gösteriyor, ancak web formları uygulamanızı nasıl oluşturduğunuza bağlı. Üzerinde sadece "merhaba dünya" metni varken, herhangi bir sunucu tarafı denetimi olmadan, mvc% 30-50 daha hızlıdır.


12

Benim için MVC'deki gerçek "performans" artışı, uygulamanın test edilebilir yüzeyinin artmasıdır. WebForms ile test etmesi zor olan birçok uygulama vardı. MVC ile test edilebilir hale gelen kod miktarı temelde iki katına çıkar. Temel olarak, kolayca test edilemeyen tek şey, düzeni oluşturan koddur. Görünümde kullanılan gerçek verileri dolduran mantık da dahil olmak üzere tüm iş mantığınız ve veri erişim mantığınız artık teste tabi tutulabilir. Aynı zamanda daha performanslı olmasını beklerken - sayfa yaşam döngüsü büyük ölçüde basitleştirilmiştir ve web programlamaya daha uygundur - aynı veya biraz daha yavaş olsa bile, kaliteli bir perspektiften geçmeye değer.


Birisinin bu yanıta neden olumsuz oy verdiğini gerçekten bilmek isterim.
tvanfosson

Benim düşünceme göre, iyi tasarlanmış bir ASP.NET web formları uygulaması, bir MVC uygulaması kadar test edilebilir olduğu için olumsuz oy verilebilir. Her ikisini de geliştirme konusundaki deneyimim, MVC'nin sizi temiz bir programlama modeline (IMO'nun en güçlü yönlerinden biri olan) zorlamasıdır. Web formları daha tembel şeyler yapmanızı sağlar, ancak web formlarında aynı test edilebilir yüzeye sahip olmak hala çok mümkündür. Her neyse, benim tahminim bu.
dudemonkey

Razor görünümleri, kodun görünümün içine gömülmesini tam anlamıyla teşvik eder. Bu test edilebilir değil ve endişelerin ayrılması için pek de iyiye işaret değil. Sırf MVC'nin size denetleyiciler yazması, ne yaptığınızı bilmiyorsanız, her şeyi patlatamayacağınız anlamına gelmez. Yetenekli bir geliştirici, WebForms'tan MVC'ye göre daha fazla (veya daha fazla) performans elde edecek ve neredeyse aynı "test edilebilir yüzeye" sahip olacaktır.
Richard Hauer

@RichardHauer, bunu yazdığım zaman tam anlamıyla doğru değildi ama bunu geliştirdiler. WebForms'un .NET Core'da bir geleceği yok gibi göründüğü için, bu bir tartışma konusu gibi görünüyor.
tvanfosson

@tvanfosson Kabul edildi - artık tartışmalı. Hangi parçanın doğru olmadığını düşündüğünüzden emin değilsiniz, belki de benim "gerçek anlamda" kullanımıma itiraz ediyorsunuz? Her neyse, TagHelpers ile MVC'nin daha yeni sürümleri, kodu düzenlere yerleştirme alışkanlığını kırmaya yardımcı oluyor ve bu da sonunda her şeyin benim için çalışmasını sağlayabilir. Bu gönderiyi takdir edin elbette oldukça eski, ancak o zaman bile, iyi oluşturulmuş bir WebForms formu MVC'nin hiçbir "sihirli kablolaması" olmadan çok hızlıdır ve görünümde hiçbir kod gömülü değildir.
Richard Hauer

7

Sanırım buradaki sorun, ASP.Net MVC'nin eski web formlarından ne kadar hızlı olursa olsun, bir fark yaratmayacaktır, çünkü harcanan zamanın çoğu veritabanındadır. Çoğu zaman, web sunucularınız% 0-10 CPU kullanımında sadece veritabanı sunucunuzda bekliyor olacaksınız. Web sitenizde çok fazla sayıda isabet almadığınız ve veritabanınız son derece hızlı olmadığı sürece, muhtemelen büyük bir fark görmeyeceksiniz.


Kullanıcılarınız olabilir - görünüm durumu yok.
UpTheCreek

6

Erken ASP.NET MVC geliştirmeden bulabildiğim tek somut sayılar bu forum başlığında:

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

Rob Connery, ScottGu'nun ASP.NET MVC'nin saniyede 8000 isteğe hizmet verebileceğini iddia ettiğini iddia etti.

Belki Jeff ve ekibi bu siteyi geliştirmelerinden bir tür ipucu verebilir.


3

Kabul edilen görüşün aksine, optimize edilmiş web formlarının kullanımı MVC'yi ham performans açısından tamamen öldürür. Web formları, MVC'nin sahip olduğundan çok daha uzun süre html sunma görevi için hiper optimize edilmiştir.

Metrikler http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db adresinde mevcuttur.

Her bir mvc karşılaştırması, listenin alt-orta / alt-üst sıralamasında yer alırken, optimize edilmiş web formları kullanım yerleri üst-orta / üst-alt sıralamalarda yer alır.

Bu ölçümler için anekdot niteliğinde ancak çok ciddi bir doğrulama olan www.microsoft.com , MVC değil web formları tarafından sunulur. Burada, deneysel olarak daha hızlı olsaydı MVC'yi seçmeyeceklerine inanan var mı?


2

Buna cevap vermenin gerçekten bir yolu yok. MVC, Web Formları görünüm motorunu varsayılan olarak kendisi kullanır ve herhangi bir sayıda özel görünüm motorunu kullanacak şekilde yapılandırılabilir, bu nedenle bir performans karşılaştırması istiyorsanız daha spesifik olmanız gerekir.


2

MVC'de çalışmaya yaklaşık bir yıl önce başladım, ilham aldım ama etkilenmedim.

Görünüm durumundan nefret ediyorum ve ASP.NET açısından tüm kötülüklerin kökü olarak görüyorum. Bu yüzden onu kullanmıyorum ve tamamen dürüst olmak gerekirse neden yapasın ki?

Temelde ASP.NET MVC Framework konseptini aldım ve bunu kendi yöntemimle oluşturdum. Yine de birkaç şeyi değiştirdim. Denetleyicimi sarma kodunu veya URL yönlendirme kodunu dinamik yeniden derleme etrafında oluşturdum.

Şimdi, ASP.NET MVC uygulamalarının nasıl kullandığınıza bağlı olarak daha hızlı olacağını söyleyecek kadar ileri gideceğim. WebForms'u tamamen terk ederseniz, ASP.NET yaşam döngüsü ve nesne modeli çok büyük olduğu için daha hızlı olursunuz.

Yazarken, bir orduyu örnekliyorsunuz ... beklemeyin, görüşünüzün oluşturulmasına katkıda bulunacak bir nesneler ordusu. Bu, ASPX sayfasındaki minimum davranış miktarını nerede ifade edeceğinizden daha yavaş olacaktır. (Görünüm motoru soyutlamasını umursamıyorum çünkü Visual Studio'daki ASPX sayfaları için destek iyi, ancak WebForms'u bir kavram olarak ve temelde herhangi bir ASP.NET çerçevesini kod şişkinliği veya değiştirememe nedeniyle tamamen bıraktım. başvuruma bağlanan şeyler).

Gerektiğinde özel amaçlı nesneler ve kod yaymak için dinamik yeniden derlemeye (System.Reflection.Emit) güvenmenin yollarını buldum. Bu kodun yürütülmesi yansımadan daha hızlıdır ancak başlangıçta yansıtma hizmeti aracılığıyla oluşturulur. Bu, MVC aromalı çerçeveme harika bir performans sağladı, ancak aynı zamanda çok statik olarak yazılmış. Dizeler ve ad / değer çifti koleksiyonları kullanmıyorum. Bunun yerine, özel derleyici hizmetlerim, bir başvuru türü geçirilen bir denetleyici eylemine bir form gönderisini yeniden yazar. Sahnenin arkasında pek çok şey var ama bu kod hızlı, WebForms veya MVC Framework'ten çok daha hızlı.

Ayrıca, URL'ler yazmıyorum, daha sonra hangi denetleyici eyleminin başlatılacağını söyleyen URL'lere çevrilen lambda ifadeleri yazıyorum. Bu özellikle hızlı değil, ancak bozuk URL'lere sahip olmaktan daha iyi. Sanki statik olarak yazılmış kaynaklarınız ve statik olarak yazılmış nesneleriniz varmış gibi. Statik olarak yazılmış bir web uygulaması mı? İstediğim bu!

Daha fazla insanı bunu denemeye teşvik ederim.


2
Yani bu sorunun doğrudan cevabı değil mi? Bununla birlikte, ilgili ve birkaç iyi noktaya işaret ediyor. Ama hey, kendi ihtiyaçlarım için yaptığım bir şey ve bana çok iyi uyuyor. Çok az kişi nedenini anlasa da fikirlerimi paylaşmaktan da zevk alıyorum.
John Leidegren

1
Pekala, oyunuzu değiştirmek zorunda değilsiniz, ancak oyunuzu düşürmek zorunda değilsiniz, çünkü bu 'cevap' değil. Metne bir süre bakarsanız, ASP.NET MVC'nin WebForms'tan daha hızlı olduğuna ve neden böyle olduğuna işaret eden birkaç şey vardır. Ve yansıma, nesne modeli ve WebForms'un ViewState ek yükü gibi şeylere değinir.
John Leidegren

@John - artık MVC2 geliştirilmiş model bağlama, doğrulama, güçlü tipte yardımcılar vb. İle çıktı, yönteminize kıyasla onu nasıl değerlendirirsiniz?
tvanfosson

MVC2 çok daha iyi, o zamanlar inşa ettiğim şeyin yerini aldığına inanıyorum (beta sürümde MVC1 ile). Mevcut araçlardan vazgeçmeden ASP.NET'in üzerine inşa etmeye çalıştığım şeyle ilgili olarak oldukça çetin sorunlarla karşılaştım. Söylemeye yetecek kadar çok şey öğrendim ve sonunda bunu üretime soktum. Şimdi, mevcut araç / çerçevenin (VS / ASP.NET / C #) bu şeyler için gerçekten uygun olmadığını anladım ve sonunda bu yolda ilerlemek istiyorsanız, kendi derleyicilerinize / model kontrolünüze yatırım yapmanız gerekecek bazı şeylerin sizin lehinize çalışacağı şeyler.
John Leidegren

O zamanlar ASP.NET MVC'yi pek düşünmemiştim. İstediğimi bildiğim şeyler yoktu. Ancak, bunları geliştirmek, test etmek ve çözmek için çok zaman harcamak zorunda kaldım. Halen oluşturduğum web çerçevesinin statik yönünün bu bakımdan MVC'den daha üstün olduğunu düşünüyorum, ancak C # derleyicisinin bu sorunu çözmek için yetersiz olduğunu düşünüyorum. Meta programlama söz konusu olduğunda daha fazla esneklik sağlayan bir dile / derleyiciye ihtiyacınız var. Bunu çalışma zamanında yapmak zorunda kaldım ve derlenmiş örnekleri önbelleğe almak genellikle imkansızdı, bu yüzden işleri dinamik olarak yeniden derlemek zorunda kaldım.
John Leidegren

2

Görsel stüdyo ile oluşturulan projeler. Biri mvc4 şablonu, diğeri WebForm (tranditional). Ve WCAT ile yük testi yapıldığında, sonuç budur,

MVC4, WebForms'tan oldukça yavaştır, herhangi bir fikriniz var mı?

görüntü açıklamasını buraya girin

MVC4

  • yaklaşık 11 rps alabilir
  • rps hem 2 cpu hem de 4 cpu sunucusu oldukça düşük

görüntü açıklamasını buraya girin

WebForms (aspx)

  • 2500 rps'nin üzerine çıkabilir

  • performans katilinin bunun bir MVC Bata veya RC hatası olduğu bulundu. Ve Bundles eşyalarını kaldırdığımda performans artacaktır. Şimdi en son sürüm bunu düzeltti.


1

Performans, ne yaptığınıza bağlıdır ... Genellikle MVC, asp.net'ten daha hızlıdır çünkü Viewstate yoktur ve MVC varsayılan olarak Geri Göndermeden daha çok Geri Çağırma ile çalışır.

Web formu sayfanızı optimize ederseniz, MVC ile aynı performansı elde edebilirsiniz, ancak bu çok iş olacaktır.

Ayrıca, css ve javascriptlerinizi birleştirmek ve küçültmek, resimlerinizi gruplamak ve bunları bir sprite olarak kullanmak gibi web sitesi performansını iyileştirmenize yardımcı olmak için MVC (ve ayrıca Webform için) çok sayıda nuget vardır.

Web sitesinin performansı büyük ölçüde mimarinize bağlıdır. İyi bir endişe ayrımı olan temiz bir kod, size daha temiz bir kod ve performansı nasıl artıracağına dair daha iyi bir fikir getirecektir.

Sizin için varsayılan olarak çok sayıda performans iyileştirmesi içeren temiz bir mimari oluşturacak olan bu " Neos-SDI MVC Şablonu " şablonuna bir göz atabilirsiniz ( MvcTemplate web sitesini kontrol edin ).


-1

görüntü açıklamasını buraya girin

Bazı temel kodlarla küçük bir VSTS yük testi denemesi yaptım ve ASP.NET MVC yanıt süresinin ASP.NET Web formlarına kıyasla iki kat daha hızlı olduğunu buldum. Yukarıdaki grafikle birlikte grafik görülmektedir.

Bu yük testi deneyini bu CP makalesinden ayrıntılı olarak okuyabilirsiniz: https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

Test, VSTS ve telerik yük test yazılımı kullanılarak aşağıdaki spesifikasyonlarla gerçekleştirilmiştir: -

Kullanıcı 25 kullanıcı yükler.

Testin çalışma süresi 10 dakikaydı.

Makine yapılandırması DELL 8 GB Ram, Core i3

Proje, IIS 8'de barındırıldı.

MVC 5 kullanılarak proje oluşturuldu.

Ağ LAN bağlantısı varsayıldı. Yani bu test şimdilik ağ gecikmesini hesaba katmıyor.

Testte tarayıcı, Chrome ve İnternet gezginini seçti.

Bilinmeyen olayların ortalamasını almak için test sırasında alınan çoklu okuma. Alınan 7 okuma ve tüm okumalar bu makalede 1, 2 vb. Okuma olarak yayınlanmaktadır.


Test metodolojiniz kötü ve ağır şekilde önyargılı ve sonuçlarınız geçersiz. Düzgün oluşturulmuş bir WebForms uygulaması test edilebilirdir, endişelerin uygun şekilde ayrılmasına sahiptir ve minimum yük ek yüküne sahiptir. MVC, sayfa yaşam döngüsü olay döngüsüne sahip olmasa da, uğraşmak için yönlendirme ve görüntüleme yürütmesine sahiptir. CP ile ilgili bu konudaki makaleleriniz büyük ölçüde önyargılı.
Richard Hauer

En kötü teknolojide bile düzgün ve dikkatli bir şekilde oluşturulmuş bir uygulama mucizeler yaratacaktır. ASP.NET sayfa yaşam döngüsü, HTML UI oluşturma ile ilgilendiğinden yönlendirme ve görüntüleme yürütmesine kıyasla kesinlikle daha fazla yüke sahiptir. Yönlendirme, ASP.NET çerçevesinin bir parçasıdır, bu nedenle normal web formlarında bile bulunurlar. Performansınızın arkasında kod yazmazsanız kabul ettiğim bir şey MVC'ye eşdeğer olacaktır ancak Webform araç kutusu o kadar caziptir ki, arkasındaki kod onun ayrılmaz bir parçası haline gelir. MVC bunu yapmama hiç izin vermiyor. Jiletle tasarım görünümünü ve arkasındaki kodu nasıl devre dışı bıraktıklarını seviyorum.
Shivprasad Koirala
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.