IIS memiliki fitur yang mengganggu untuk situs web dengan lalu lintas rendah di mana ia mendaur ulang proses pekerja yang tidak digunakan, menyebabkan pengguna pertama ke situs setelah beberapa waktu mendapatkan penundaan yang sangat lama (30+ detik).
Saya telah mencari solusi untuk masalah ini dan saya telah menemukan solusi potensial ini.
A. Gunakan plugin Inisialisasi Aplikasi
B. Gunakan Mulai-Otomatis dengan .NET 4
C. Nonaktifkan batas waktu idle (di bawah IIS Reset)
Saya bertanya-tanya mana yang lebih disukai, dan yang lebih penting, mengapa ada begitu banyak solusi untuk masalah yang sama? (Dugaan saya adalah mereka tidak, dan saya hanya tidak memahami sesuatu dengan benar).
Edit
Performing C tampaknya cukup untuk menjaga agar situs saya tetap hangat, tetapi saya telah menemukan bahwa akar sebenarnya dari lambatnya situs saya ada hubungannya dengan Entity Framework, yang sepertinya tidak bisa mencari tahu mengapa ini menjadi dingin. Lihat pertanyaan ini , yang sayangnya belum dijawab tetapi telah dijawab!
Saya akhirnya hanya harus membuat skrip pemanasan untuk mengunjungi situs saya sesekali untuk memastikannya tetap cepat.
Jawaban:
Pilihan A, B dan D tampaknya berada dalam kategori yang sama karena mereka hanya mempengaruhi waktu mulai awal, mereka melakukan pemanasan situs web seperti kompilasi dan pemuatan perpustakaan di memori.
Menggunakan C, mengatur batas waktu idle, harus cukup sehingga permintaan berikutnya ke server dilayani dengan cepat (memulai ulang kumpulan aplikasi membutuhkan waktu cukup lama - dalam urutan detik).
Sejauh yang saya tahu, batas waktu ada untuk menghemat memori yang dijalankan oleh situs lain secara paralel pada mesin itu. Harga satu kali waktu muat lambat.
Selain fakta bahwa kumpulan aplikasi akan dimatikan jika tidak ada aktivitas pengguna, kumpulan aplikasi juga akan didaur ulang secara default setiap 1740 menit (29 jam).
Dari technet:
Selama daur ulang kumpulan aplikasi dibiarkan, itu sudah cukup. Tetapi jika Anda benar-benar menginginkan kinerja terbaik untuk sebagian besar komponen, Anda juga harus menggunakan sesuatu seperti Modul Inisialisasi Aplikasi yang Anda sebutkan.
sumber
Tantangan Web Hosting
Anda harus ingat bahwa tidak ada opsi konfigurasi mesin yang tersedia jika Anda di-host di server bersama karena banyak dari kita (perusahaan kecil dan individu).
ASP.NET MVC Overhead
Situs saya membutuhkan setidaknya 30 detik ketika belum mencapai lebih dari 20 menit (dan aplikasi web telah dihentikan). Mengerikan sekali.
Cara Lain untuk Menguji Kinerja
Ada cara lain untuk menguji apakah itu ASP.NET MVC Anda memulai atau sesuatu yang lain. Jatuhkan halaman HTML normal di situs Anda tempat Anda dapat menekannya secara langsung.
Jika masalah terkait dengan ASP.NET MVC mulai, maka halaman HTML akan segera render bahkan ketika aplikasi web belum dimulai.
Begitulah cara saya pertama kali menyadari bahwa masalahnya ada di startup ASP.NET MVC. Saya memuat halaman HTML kapan saja dan itu akan memuat dengan sangat cepat. Kemudian, setelah mencapai halaman HTML itu, saya menekan salah satu URL ASP.NET MVC saya dan saya akan mendapatkan pesan Chrome "Menunggu raddev.us ..."
Tes Lain Dengan Script Bermanfaat
Setelah itu saya menulis skrip LINQPad (lihat http://linqpad.net untuk lebih lanjut) yang akan mengenai situs web saya setiap 8 menit (kurang dari waktu aplikasi diturunkan - yang seharusnya 20 menit) dan saya membiarkan itu berjalan berjam-jam.
Saat skrip berjalan, saya membuka situs web saya dan setiap kali situs saya muncul dengan sangat cepat. Ini memberi saya ide yang baik bahwa kemungkinan besar kelambatan yang saya alami adalah karena waktu startup ASP.NET MVC.
Dapatkan LinqPad dan Anda dapat menjalankan skrip berikut - cukup ubah URL ke milik Anda dan biarkan berjalan dan Anda dapat mengujinya dengan mudah. Semoga berhasil.
CATATAN : Di LinqPad Anda harus menekan F4 dan menambahkan referensi ke System.Net untuk menambahkan perpustakaan yang akan mengambil halaman Anda.
JUGA : pastikan Anda mengubah variabel String URL untuk menunjuk pada URL yang akan memuat rute dari situs ASP.NET MVC Anda sehingga mesin akan berjalan.
sumber
Menulis layanan ping / skrip untuk mengenai situs web idle Anda adalah cara terbaik untuk melakukannya karena Anda akan memiliki kontrol penuh. Opsi lain yang telah Anda sebutkan akan tersedia jika Anda telah menyewa kotak hosting khusus.
Di ruang hosting bersama, skrip pemanasan adalah pertahanan tingkat pertama terbaik (swadaya adalah bantuan terbaik). Berikut adalah artikel yang membagikan gagasan tentang cara melakukannya dari aplikasi web Anda sendiri .
sumber
Saya akan menggunakan B karena dalam hubungannya dengan daur ulang proses pekerja berarti hanya akan ada penundaan saat daur ulang. Ini menghindari penundaan yang biasanya dikaitkan dengan inisialisasi dalam menanggapi permintaan pertama setelah idle. Anda juga mendapatkan manfaat daur ulang.
sumber
Opsi yang baik untuk melakukan ping situs pada jadwal adalah menggunakan Microsoft Flow, yang gratis hingga 750 "berjalan" per bulan. Sangat mudah untuk membuat Flow yang mengenai situs Anda setiap jam agar tetap hangat. Anda bahkan dapat mengatasi batas 750 dengan membuat aliran tunggal dengan penundaan memisahkan beberapa klik situs Anda.
https://flow.microsoft.com
sumber
Lihat artikel ini untuk kiat tentang cara membantu masalah kinerja. Ini termasuk masalah kinerja yang terkait dengan memulai, di bawah bagian "mulai dingin". Sebagian besar dari ini akan menjadi masalah, apa pun jenis server yang Anda gunakan, secara lokal atau dalam produksi.
http://blogs.msdn.com/b/mcsuksoldev/archive/2011/01/19/common-performance-issues-on-asp-net-web-sites.aspx
sumber
Saya mendapatkan penundaan 15 detik yang konsisten pada permintaan pertama setelah 4 menit tidak aktif. Masalah saya adalah aplikasi saya menggunakan Otentikasi Terintegrasi Windows ke SQL Server dan profil layanan berada dalam domain yang berbeda dari server. Ini menyebabkan otentikasi lintas-domain dari IIS ke SQL saat inisialisasi aplikasi - dan ini adalah sumber nyata keterlambatan saya. Saya berubah menggunakan SQL login daripada otentikasi windows. Penundaan segera hilang. Saya masih memiliki semua pengaturan inisialisasi aplikasi untuk membantu meningkatkan kinerja tetapi mungkin tidak diperlukan sama sekali dalam kasus saya.
sumber