Ketika ada terlalu banyak halaman dalam sebuah proyek, IIS dimulai dan situs web sangat lambat saat Anda membukanya untuk pertama kalinya, karena proyek tidak dikompilasi sebelumnya pada saat rilis, tetapi dikompilasi secara dinamis saat pengguna mengunjungi halaman web. Jika Anda ingin meningkatkan performa situs yang ada dan melakukan pemeriksaan kesalahan di situs Anda, Anda perlu memilih "Prakompilasi selama rilis" saat Anda menerbitkan proyek Anda.
Perkenalan
Untuk proyek kecil, penerbitan sesuai dengan pengaturan default pada dasarnya dapat memenuhi operasi normal, halaman pertama dibuka dalam 56 detik (tergantung pada konfigurasi server), dan pembukaan pertama halaman lain pada dasarnya selesai dalam 12 detik, bukan pembukaan instan pertama.
Setelah fungsi proyek menjadi kompleks dan jumlah file meningkat, akan memakan waktu lebih dari 30 detik untuk membuka halaman pertama untuk proses pertama setelah publikasi, dan sekitar 10 detik untuk pembukaan pertama halaman lain, bukan pembukaan instan pertama.
Ini karena proyek tidak dikompilasi sebelumnya pada saat rilis, tetapi dikompilasi secara dinamis ketika pengguna mengakses halaman web, dan setelah kumpulan aplikasi didaur ulang, atau file proyek diubah, itu akan dikompilasi ulang dan melalui "pertama kali" yang lambat lagi, yang tidak dapat ditoleransi.
Manfaat prakompilasi
- Kinerja. Kode yang dikompilasi dijalankan jauh lebih cepat daripada bahasa skrip seperti ECMAScript atau VBScript karena merupakan representasi yang lebih dekat dengan kode mesin dan tidak memerlukan analisis tambahan.
- Keamanan. Kode yang dikompilasi lebih sulit untuk direkayasa balik daripada kode sumber yang tidak dikompilasi karena tidak memiliki keterbacaan dan abstraksi yang dimiliki bahasa tingkat tinggi. Selain itu, alat fuzzing meningkatkan kemampuan kode yang dikompilasi untuk menahan pemrosesan rekayasa balik.
- Stabilitas. Periksa kode Anda untuk kesalahan sintaks, masalah keamanan jenis, dan masalah lainnya pada waktu kompilasi. Dengan menangkap kesalahan ini pada waktu build, banyak kesalahan dapat dihilangkan dalam kode.
- Interoperabilitas. Karena kode MSIL mendukung bahasa .NET apa pun, dimungkinkan untuk menggunakan rakitan yang awalnya ditulis dalam bahasa lain dalam kode. Misalnya, jika Anda menulis halaman web ASP.NET dalam C#, Anda dapat menambahkan referensi ke file .dll yang ditulis dalam Visual Basic.
ASP.NET Inti telah dikompilasi sebelumnya
Telah dikompilasi sebelumnya
Prakompilasi adalah cara default untuk ASP .Net Core. Pada saat penerbitan, semua tampilan Razor dalam sistem telah dikompilasi sebelumnya secara default. DLL tampilan yang dikompilasi secara seragam diberi nama xxx.PrecompiledViews.dll atau xxx.Views.dll
Kompilasi dinamis
Sangat mudah untuk mengonfigurasi seluruh proyek ke kompilasi dinamis, cukup tambahkan proyek konfigurasi MvcRazorCompileOnPublish dengan nilai false
ASP.NET Pra-kompilasi situs web
Kami menggunakan Visual Studio untuk menerbitkan situs web dengan cara berikut:
Arti dari opsi "Izinkan pembaruan ke situs yang telah dikompilasi sebelumnya" Saat kami menerbitkan proyek web .Net, secara umum, semua . CS, yang secara otomatis akan menghasilkan pustaka tautan dinamis DLL, yang dapat melindungi kode sumber situs web dengan sangat baik, karena kode sisi server umumnya ditempatkan di . Karena semua file DLL dalam file CS dibuat, lalu mengunggahnya ke server, orang lain tidak dapat dengan mudah membukanya!
Namun, file lain, seperti ashx, aspx, dan file lainnya, apa yang ada di dalamnya, adalah apa adanya, orang lain dapat membuka file ini untuk dilihat, meskipun yang lain tidak dapat melihat kode CS, tetapi masih dapat melihat kode HTML atau beberapa kontrol server dan atribut terkait dalam file ASPX; File seperti ashx setara dengan file CS, dan kode di dalamnya dapat dengan mudah dilihat;
Oleh karena itu, . File CS aman, tetapi ASPX, ashx, dan file lainnya tidak aman; Lantas, apakah ada cara untuk membuat file web yang diunggah ke server aman? Ada caranya, yaitu, saat menerbitkan, jangan centang "Izinkan pembaruan ke situs yang telah dikompilasi sebelumnya ini";
Centang Izinkan pembaruan ke situs yang telah dikompilasi sebelumnya ini
Jika Anda mencentang "Izinkan untuk memperbarui situs yang telah dikompilasi sebelumnya ini" saat menerbitkan web, maka hasilnya adalah seperti ini: Seluruh file situs web, kecuali semua file CS yang dikompilasi menjadi file DLL, file lain, dan yang asli tidak memiliki perubahan, apa yang ada di dalamnya, atau apa, selama orang lain membukanya melalui Notepad, kode, kode HTML, dll di dalamnya dapat dilihat oleh orang lain secara sekilas.
Selain itu, ketika pengguna pertama kali mengunjungi halaman tertentu, mereka perlu dikompilasi untuk menemukan bug, dan kemudian jika tidak ada kesalahan, mereka dapat diakses secara normal, sehingga kecepatannya akan menjadi relatif lambat. Kunjungan setelah itu normal;
Hapus centang "Izinkan pembaruan ke situs yang telah dikompilasi sebelumnya"
Jika Anda tidak mencentang "Izinkan untuk memperbarui situs yang telah dikompilasi sebelumnya ini" saat menerbitkan web, maka hasilnya adalah sebagai berikut: 1. Semua file CS di situs web dikompilasi menjadi file DLL; 2. Selain file cs, file lain, seperti ASPX, ASHX, dan file lainnya, juga dikompilasi bersama, dan setiap file menghasilkan file *.compiled yang sesuai di direktori BIN;
Setelah itu, jika Anda melihat ASPX, ASHX, dan file lain melalui notepad, Anda tidak akan melihat kode apa pun di dalamnya, bahkan markup kode HTML tidak terlihat, buka file seperti itu, hanya ada satu baris teks di dalamnya, isinya adalah "Ini adalah file markup yang dihasilkan oleh alat yang telah dikompilasi sebelumnya, tidak boleh dihapus!", dan ukuran file ini adalah 1kb;
Jika Anda mencoba membuka halaman situs web, Anda akan menemukan bahwa kecuali halaman pertama setelah proyek dimulai, yang masih membutuhkan waktu 1 ~ 2 detik (tanpa EF), pertama kali satu halaman lain terbuka secara instan (kelambatan pertama EF berada di luar cakupan artikel ini). Ini membuat saya merasa seperti saya terlambat untuk melihat precompiled!
Di sini saya diam-diam memberi tahu Anda bahwa menghapus direktori Views tidak akan memengaruhi pembukaan normal halaman web ~ Mengapa Anda tidak membiarkannya dihapus, kami tidak berani bertanya, dan kami tidak berani menghapusnya.
Tujuannya tercapai, dan ada beberapa efek samping yang perlu diselesaikan, seperti kekacauan di direktori tempat sampah.
Pilih "Jangan gabungkan." Buat rakitan terpisah untuk setiap halaman dan kontrol", dan hasilnya adalah lebih banyak file App_Web_*.dll di tempat sampah.
Pada saat rilis, root proyek menghasilkan file PrecompiledApp.config. Isinya adalah sebagai berikut:
File PrecompiledApp.config digunakan untuk melacak bagaimana aplikasi disebarkan dan apakah ASP.NET perlu mengkompilasi file apa pun pada saat permintaan. |