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.
asp.net
asp.net-mvc
performance
webforms
GEOCHET
sumber
sumber
Jawaban:
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 ...
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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?
sumber
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.
sumber
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.
sumber
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?
MVC4
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.
sumber
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 ).
sumber
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.
sumber