Kinerja ASP.NET MVC


102

Saya menemukan beberapa komentar liar bahwa ASP.NET MVC 30x lebih cepat daripada ASP.NET WebForms. Apa perbedaan kinerja sebenarnya yang ada, apakah ini telah diukur dan apa manfaat kinerjanya.

Ini untuk membantu saya mempertimbangkan untuk berpindah dari ASP.NET WebForms ke ASP.NET MVC.


20
Setelah bekerja dengan WebForms sejak mereka keluar, saya tidak akan pernah rela kembali! MVC telah mencuri <3 saya - dan situs ini berjalan dengan sangat baik pada Beta 5!
Jarrod Dixon

2
Ada apa dengan semua revisi revisi pada pertanyaan ini ..?
Nick

@Nick: OP memutar kembali hasil edit apa pun, dan menghapus komentar apa pun yang menjelaskannya.
GEOCHET

@ Rich B: Benar, dia menghapus sekitar 5 komentar saya.
George Stocker

2
Membutuhkan pembaruan sekarang karena kita mendekati rilis MVC3.
Andrew Lewis

Jawaban:


69

Kami belum melakukan jenis skalabilitas dan uji kinerja yang diperlukan untuk menghasilkan kesimpulan apa pun. Saya pikir ScottGu mungkin telah mendiskusikan target kinerja potensial. Saat kami beralih ke Beta dan RTM, kami secara internal akan melakukan lebih banyak pengujian kinerja. Namun, saya tidak yakin apa kebijakan kami tentang memublikasikan hasil tes kinerja.

Bagaimanapun, tes semacam itu benar-benar perlu mempertimbangkan aplikasi dunia nyata ...


13
Sekarang MVC telah dirilis, apakah ada update untuk merilis hasil perf?
chris

6
Hanya memilih ini karena skor 5.999 sebelumnya menyakiti mata saya :(
Damien

2
Saat ini, Anda pasti sudah memiliki beberapa nomor. Mau memperbarui jawaban Anda? Atau apakah Anda menemukan bahwa kebijakan yang mengganggu melarangnya?
tvanfosson

7
Jumlahnya 42. :) Secara umum, nomor kami mungkin tidak akan berguna untuk aplikasi dunia nyata jadi kami biasanya tidak memberikannya. Namun, saya tahu tim lain di Microsoft membangun situs web skala besar yang menunjukkan angka yang menguntungkan. Dengan kata lain, masalah kinerja apa pun lebih mungkin disebabkan oleh kesalahan programmer daripada masalah warisan apa pun dalam kerangka kerja. Biasanya interaksi dengan database dan layanan eksternal adalah penyebabnya. :)
Haacked

Benar! Harap perbarui ini! Mungkin bukan tolok ukur tetapi gagasan singkat, apakah mereka setara atau apakah mvc sedikit lebih baik dalam kinerja?
gideon

48

Saya pikir ini akan menjadi pertanyaan yang sulit untuk dijawab secara definitif karena banyak hal akan tergantung pada A) bagaimana Anda mengimplementasikan aplikasi WebForms, dan B) bagaimana Anda mengimplementasikan aplikasi MVC. Dalam bentuk "mentah" mereka, MVC kemungkinan besar lebih cepat daripada WebForms, tetapi alat dan pengalaman bertahun-tahun telah menghasilkan sejumlah teknik untuk membangun aplikasi WebForms yang cepat. Saya berani bertaruh bahwa pengembang ASP.NET senior dapat menghasilkan aplikasi WebForms yang menyaingi kecepatan aplikasi MVC apa pun - atau setidaknya mencapai perbedaan yang dapat diabaikan.

Perbedaan nyata - seperti yang disarankan @tvanfosson - adalah dalam kemampuan pengujian dan SoC yang bersih. Jika meningkatkan kinerja adalah perhatian utama Anda, saya rasa itu bukan alasan yang bagus untuk langsung menggunakan WebForms dan mulai membangun kembali di MVC. Tidak setidaknya sampai Anda mencoba teknik yang tersedia untuk mengoptimalkan WebForms.


Jawaban yang bagus Todd (betapa mengejutkan bagi penginjil pengembang yang benar-benar memiliki tanggapan pragmatis). Satu-satunya hal yang Anda salah adalah dalam implementasi mentah formulir web memang jauh lebih cepat.
Chris Marisic

42

Ini menurunkan salah satu halaman saya dari payload 2MB, menjadi 200k, hanya dengan menghilangkan kondisi tampilan dan membuatnya dapat diterima secara terprogram untuk bekerja dengan keluaran yang dikirimkan.

Ukurannya sendiri, meskipun pemrosesannya sama akan membuat peningkatan besar dalam koneksi per detik dan kecepatan permintaan.


31
Anda dapat memperbaiki kondisi tampilan besar yang mengganggu itu tanpa MVC juga
Andrei Rînea

1
Hanya untuk menguraikan
Kondisi Tampilan

8
ya tapi di MVC ini adalah default yang waras bukan keputusan desain yang memaksa Anda untuk meninggalkan semua kontrol dan vendor yang mengklaim hanya bekerja pada formulir web, dengan membuat formulir web "berperilaku salah" dengan menghilangkan tulang punggungnya. Saya tidak setuju Anda hanya bisa mengkodekan ulang halaman itu, tetapi keseluruhan aplikasi lebih baik tanpa kondisi tampilan.
DevelopingChris

jadi bukankah menurut Anda itu adalah keputusan terburuk Anda untuk mem-port seluruh aplikasi ke MVC daripada menonaktifkan kondisi tampilan di web.config? dan tidak, kondisi tampilan bukanlah tulang punggungnya. hanya jika Anda telah meriset, kondisi tampilan dapat disimpan dalam cache serta sesi.
Simple Fellow

29

Saya pikir banyak orang yang berpikir bahwa WebForms pada dasarnya lambat atau boros sumber daya menempatkan kesalahan di tempat yang salah. 9 kali dari 10 ketika saya dibawa untuk mengoptimalkan aplikasi formulir web, ada terlalu banyak tempat di mana pembuat aplikasi salah memahami tujuan kondisi tampilan. Saya tidak mengatakan bahwa kondisi tampilan sempurna atau apa pun, tetapi CARA terlalu mudah untuk menyalahgunakannya, dan penyalahgunaan inilah yang menyebabkan bidang kondisi tampilan membengkak.

Artikel ini sangat berharga dalam membantu saya memahami banyak dari pelanggaran ini. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

Untuk membuat perbandingan yang valid antara MVC dan WebForms, kita perlu memastikan bahwa kedua aplikasi menggunakan arsitektur dengan benar.


14

Pengujian saya menunjukkan sesuatu antara 2x dan 7x lebih banyak req / detik di MVC, tetapi itu tergantung bagaimana Anda membangun aplikasi webforms Anda. Dengan hanya teks "hello world" di atasnya, tanpa kontrol sisi server, MVC sekitar 30-50% lebih cepat.


12

Bagi saya peningkatan "kinerja" nyata di MVC adalah meningkatkan permukaan aplikasi yang dapat diuji. Dengan WebForms, ada banyak aplikasi yang sulit untuk diuji. Dengan MVC, jumlah kode yang dapat diuji menjadi dua kali lipat. Pada dasarnya semua yang tidak mudah diuji adalah kode yang menghasilkan tata letak. Semua logika bisnis dan logika akses data Anda - termasuk logika yang mengisi data aktual yang digunakan dalam tampilan - sekarang dapat diuji. Meskipun saya mengharapkannya untuk menjadi lebih berkinerja juga - siklus hidup halaman sangat disederhanakan dan lebih dapat diterima untuk pemrograman web - bahkan jika itu sama atau sedikit lebih lambat akan bermanfaat untuk beralih dari perspektif kualitas.


Saya benar-benar ingin mengetahui mengapa seseorang tidak menyukai jawaban ini.
tvanfosson

Perasaan saya adalah bahwa itu mungkin mendapatkan downvoted karena aplikasi formulir web ASP.NET dirancang dengan baik hanya sebagai dapat diuji sebagai aplikasi MVC. Pengalaman saya dengan mengembangkan keduanya adalah bahwa MVC memaksa Anda menjadi model pemrograman yang bersih (yang merupakan salah satu kekuatan terbesarnya, IMO). Formulir web memungkinkan Anda melakukan hal-hal yang lebih malas, tetapi masih sangat mungkin untuk memiliki permukaan yang dapat diuji yang sama di formulir web. Itu dugaan saya.
dudemonkey

Pandangan pisau cukur secara harfiah mendorong penyematan kode di dalam tampilan. Itu tidak bisa diuji, dan bukan pertanda baik untuk pemisahan kekhawatiran. Hanya karena MVC membuat Anda menulis pengontrol, tidak berarti Anda tidak dapat menyimpan semuanya jika Anda tidak tahu apa yang Anda lakukan. Pengembang yang terampil akan mendapatkan kinerja yang sama dari WebForms (atau lebih) daripada MVC, dan akan memiliki "permukaan yang dapat diuji" yang hampir identik.
Richard Hauer

@RichardHauer yang secara harfiah tidak benar ketika saya menulis ini tetapi mereka telah memperbaikinya. Karena WebForms tampaknya tidak memiliki masa depan di .NET Core, tampaknya ini menjadi titik perdebatan.
tvanfosson

@tvanfosson Setuju - ini diperdebatkan sekarang. Tidak yakin bagian mana yang menurut Anda tidak benar, mungkin Anda keberatan dengan penggunaan "secara harfiah" saya? Bagaimanapun, versi MVC yang lebih baru dengan TagHelpers memang membantu menghentikan kebiasaan memasukkan kode ke dalam tata letak yang mungkin akhirnya membuat semuanya berfungsi untuk saya. Menghargai posting ini tentu saja cukup tua, tetapi bahkan pada saat itu, formulir WebForm yang dibangun dengan baik sangat cepat tanpa "kabel ajaib" dari MVC dan tidak ada kode yang tertanam dalam tampilan sama sekali.
Richard Hauer

7

Saya pikir masalahnya di sini adalah bahwa tidak peduli seberapa cepat ASP.Net MVC daripada webform lama, itu tidak akan membuat perbedaan, karena sebagian besar waktu yang dibutuhkan ada di database. Sebagian besar waktu, server web Anda akan menggunakan 0-10% penggunaan CPU hanya menunggu di server database Anda. Kecuali jika Anda mendapatkan jumlah klik yang sangat besar di situs web Anda, dan database Anda sangat cepat, Anda mungkin tidak akan melihat perbedaan yang besar.


Pengguna Anda mungkin - tanpa kondisi tampilan.
UpTheCreek

6

Satu-satunya angka konkret yang dapat saya temukan yang berasal dari pengembangan ASP.NET MVC awal ada di forum-thread ini:

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

Rob Connery sendiri agak membenarkan pernyataan bahwa ScottGu telah mengklaim bahwa ASP.NET MVC dapat melayani 8000 permintaan per detik.

Mungkin Jeff dan krunya bisa memberikan semacam petunjuk dari perkembangan situs ini.


3

Bertentangan dengan pendapat yang diterima, penggunaan formulir web yang dioptimalkan benar-benar membunuh MVC dalam hal kinerja mentah. Formulir web telah dioptimalkan secara hiper untuk tugas melayani html jauh lebih lama daripada MVC.

Metrik tersedia di http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

Setiap mvc perbandingan tunggal ada di peringkat bawah-menengah / bawah-atas dari daftar, sementara penggunaan formulir web yang dioptimalkan ditempatkan di peringkat menengah atas / atas-bawah.

Validasi anekdot tetapi sangat serius untuk metrik ini, www.microsoft.com disajikan oleh formulir web bukan MVC. Apakah ada orang di sini yang percaya bahwa mereka tidak akan memilih MVC jika secara empiris lebih cepat?


2

Benar-benar tidak ada cara untuk menjawab ini. MVC menggunakan mesin tampilan Formulir Web secara default, dan dapat dikonfigurasi untuk menggunakan sejumlah mesin tampilan kustom, jadi jika Anda ingin perbandingan kinerja Anda harus lebih spesifik.


2

Saya mulai bekerja di MVC sekitar setahun yang lalu, saya terinspirasi tetapi tidak terkesan.

Saya benci tampilan negara dan melihatnya sebagai akar dari semua kejahatan dalam hal ASP.NET. Inilah mengapa saya tidak menggunakannya dan sejujurnya mengapa Anda melakukannya?

Saya pada dasarnya mengambil konsep ASP.NET MVC Framework dan membangunnya dengan cara saya sendiri. Saya mengubah beberapa hal. Saya membuat kode pembungkus pengontrol saya, atau kode perutean URL di sekitar kompilasi ulang dinamis.

Sekarang, saya akan mengatakan bahwa aplikasi ASP.NET MVC akan lebih cepat berdasarkan cara Anda menggunakannya. Jika Anda benar-benar meninggalkan WebForms, Anda akan lebih cepat karena siklus hidup ASP.NET dan model objek sangat besar.

Saat Anda menulis, Anda sedang membuat contoh pasukan ... tidak tunggu, banyak objek yang akan berpartisipasi dalam rendering tampilan Anda. Ini akan lebih lambat dibandingkan jika Anda mengekspresikan jumlah minimal perilaku di halaman ASPX itu sendiri. (Saya tidak peduli tentang abstraksi mesin tampilan karena dukungan untuk halaman ASPX di Visual Studio layak, tetapi saya telah benar-benar menjatuhkan WebForms sebagai konsep dan pada dasarnya kerangka kerja ASP.NET apa pun karena kode mengasapi atau tidak dapat mengubah hal-hal yang menghubungkan lamaran saya).

Saya telah menemukan cara untuk mengandalkan kompilasi ulang dinamis (System.Reflection.Emit) untuk memancarkan objek dan kode tujuan khusus kapan pun diperlukan. Pelaksanaan kode ini lebih cepat daripada refleksi tetapi pada awalnya dibangun melalui layanan refleksi. Ini telah memberikan kinerja yang luar biasa pada kerangka kerja rasa MVC saya, tetapi juga diketik dengan sangat statis. Saya tidak menggunakan string dan koleksi pasangan nama / nilai. Sebagai gantinya, layanan compiler kustom saya menulis ulang post formulir ke aksi pengontrol yang diberikan tipe referensi. Di balik layar ada banyak hal yang terjadi tetapi kode ini cepat, jauh lebih cepat daripada WebForms atau MVC Framework.

Selain itu, saya tidak menulis URL, saya menulis ekspresi lambda yang diterjemahkan ke dalam URL yang kemudian memberi tahu tindakan pengontrol mana yang harus dipanggil. Ini tidak terlalu cepat tetapi mengalahkan URL yang rusak. Ini seperti jika Anda memiliki sumber daya yang diketik secara statis serta objek yang diketik secara statis. Aplikasi web yang diketik secara statis? Itulah yang saya inginkan!

Saya akan mendorong lebih banyak orang untuk mencobanya.


2
Jadi ini bukan jawaban langsung untuk pertanyaan itu? Bagaimanapun itu terkait, dan itu membuat beberapa poin bagus. Tapi, hei, itu adalah sesuatu yang saya buat untuk kebutuhan saya sendiri, dan itu sangat cocok untuk saya. Saya juga senang berbagi ide, meskipun hanya sedikit orang yang mengerti mengapa.
John Leidegren

1
Anda tidak perlu mengubah suara Anda, tetapi Anda tidak perlu memberikan suara untuk itu, karena itu bukanlah jawaban 'the'. Jika Anda melihat beberapa saat ke dalam teks, ada beberapa hal yang menunjukkan ASP.NET MVC lebih cepat dari WebForms dan mengapa demikian. Dan itu bermuara pada hal-hal seperti refleksi dan model objek dan overhead ViewState WebForms.
John Leidegren

@ John - sekarang MVC2 keluar dengan pengikatan model yang ditingkatkan, validasi, pembantu yang diketik dengan kuat, dll., Bagaimana Anda akan mengevaluasinya dibandingkan dengan metode Anda?
tvanfosson

MVC2 jauh lebih baik, saya yakin ini sudah cukup banyak menggantikan apa yang saya bangun saat itu (dengan MVC1 dalam versi beta). Saya mengalami cukup cobaan masalah sehubungan dengan apa yang saya coba bangun di atas ASP.NET tanpa memilih keluar dari perkakas yang ada. Cukup untuk mengatakan, saya belajar banyak dan akhirnya membawanya ke produksi. Sekarang saya menyadari bahwa perkakas / kerangka kerja saat ini (VS / ASP.NET / C #) tidak benar-benar cocok untuk hal ini dan pada akhirnya jika Anda ingin menempuh jalan ini, Anda harus berinvestasi dalam kompiler / pengecekan model Anda sendiri barang untuk beberapa hal agar sesuai dengan keinginan Anda.
John Leidegren

Saya tidak terlalu memikirkan ASP.NET MVC saat itu. Itu kekurangan hal-hal yang saya tahu saya inginkan. Namun, saya harus menghabiskan banyak waktu untuk mengembangkan, menguji, dan memikirkan hal-hal ini. Saya masih berpikir bahwa aspek statis dari kerangka web yang saya bangun lebih unggul daripada MVC dalam hal itu tetapi kompiler C # tidak efisien untuk memecahkan masalah itu. Anda memerlukan beberapa bahasa / kompiler yang memungkinkan fleksibilitas yang lebih besar dalam hal pemrograman meta. Saya harus melakukan banyak hal itu saat runtime dan seringkali tidak mungkin untuk meng-cache contoh yang dikompilasi jadi saya harus banyak mengkompilasi ulang secara dinamis.
John Leidegren

2

Proyek dibuat dengan studio visual. Salah satunya adalah template mvc4, yang lainnya adalah WebForm (tranditional). Dan saat melakukan uji beban dengan WCAT, inilah hasilnya,

MVC4 cukup lambat dari WebForms, ada ide?

masukkan deskripsi gambar di sini

MVC4

  • bisa mendapatkan sekitar 11 rps
  • rps cukup rendah baik server 2-cpu atau 4-cpu

masukkan deskripsi gambar di sini

WebForms (aspx)

  • bisa di atas 2500 rps

  • pembunuh kinerja telah ditemukan bahwa itu adalah bug MVC Bata atau RC. Dan kinerjanya akan meningkat setelah saya menghapus hal-hal Bundel. Sekarang versi terbaru memperbaikinya.


1

Performa tergantung pada apa yang Anda lakukan ... Biasanya MVC lebih cepat daripada asp.net terutama karena kondisi tampilan tidak ada dan karena MVC lebih banyak bekerja dengan Callback daripada Postback secara default.

Jika Anda mengoptimalkan halaman formulir web Anda, Anda dapat memiliki kinerja yang sama dengan MVC tetapi itu akan banyak pekerjaan.

Juga, mereka banyak nugets untuk MVC (dan juga untuk Webform) untuk membantu Anda meningkatkan kinerja situs web seperti menggabungkan dan mengecilkan css dan javascript Anda, mengelompokkan gambar Anda dan menggunakannya sebagai sprite, dan sebagainya.

Performa situs web sangat bergantung pada arsitektur Anda. Yang bersih dengan pemisahan perhatian yang baik akan memberi Anda kode yang lebih bersih dan gagasan yang lebih baik tentang cara meningkatkan kinerja.

Anda dapat melihat template ini " Template MVC Neos-SDI " yang akan membuat arsitektur bersih dengan banyak peningkatan kinerja secara default (periksa situs web MvcTemplate ).


-1

masukkan deskripsi gambar di sini

Saya melakukan percobaan uji beban VSTS kecil dengan beberapa kode dasar dan menemukan waktu respons ASP.NET MVC menjadi dua kali lebih cepat dibandingkan dengan ASP.NET Webforms. Di atas adalah grafik terlampir dengan plot.

Anda dapat membaca eksperimen uji beban ini secara detail dari artikel CP ini https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

Pengujian dilakukan dengan spesifikasi di bawah ini menggunakan perangkat lunak VSTS dan telerik load test: -

Pengguna memuat 25 pengguna.

Durasi uji coba adalah 10 menit.

Konfigurasi mesin DELL Ram 8 GB, Core i3

Proyek di-host di IIS 8.

Proyek dibuat menggunakan MVC 5.

Koneksi LAN jaringan diasumsikan. Jadi tes ini tidak memperhitungkan kelambatan jaringan untuk saat ini.

Browser dalam pengujian memilih Chrome dan Internet explorer.

Beberapa pembacaan di mana diambil selama pengujian untuk rata-rata peristiwa yang tidak diketahui. 7 bacaan di mana diambil dan semua bacaan diterbitkan dalam artikel ini sebagai bacaan 1, 2 dan seterusnya.


Metodologi pengujian Anda buruk, dan sangat bias, dan kesimpulan Anda tidak valid. Aplikasi WebForms yang dibuat dengan benar dapat diuji, memiliki pemisahan masalah yang tepat, dan memiliki overhead muatan yang minimal. Meskipun MVC tidak memiliki loop peristiwa siklus hidup halaman, MVC memiliki perutean dan eksekusi tampilan yang harus dihadapi. Artikel Anda tentang topik CP ini sangat bias.
Richard Hauer

Aplikasi yang dibangun dengan benar & hati-hati bahkan dalam teknologi terburuk akan menghasilkan keajaiban. Siklus hidup halaman ASP.NET jelas memiliki lebih banyak muatan dibandingkan dengan eksekusi perutean & tampilan karena berhubungan dengan pembuatan UI HTML. Perutean adalah bagian dari kerangka ASP.NET sehingga bahkan dalam bentuk web normal mereka tetap ada. Satu hal yang saya setuju jika Anda tidak menulis kode di belakang kinerja Anda akan setara dengan MVC. Tetapi kotak alat Webform begitu menggoda sehingga kode di belakang menjadi bagian integral darinya. Sedangkan MVC sama sekali tidak mengizinkan saya melakukan itu. Saya suka bagaimana dengan pisau cukur mereka telah menonaktifkan tampilan desain dan kode di belakang.
Shivprasad Koirala
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.