Kai projekte yra per daug puslapių, IIS paleidžiama ir svetainė veikia labai lėtai, kai ją atidarote pirmą kartą, nes projektas nėra iš anksto sukompiliuotas išleidimo metu, bet dinamiškai kompiliuojamas, kai vartotojas apsilanko tinklalapyje. Jei norite pagerinti esamos svetainės našumą ir atlikti klaidų tikrinimą svetainėje, publikuojant projektą būtina pasirinkti "Iš anksto kompiliuoti išleidimo metu".
Įvadas
Mažiems projektams publikavimas pagal numatytuosius nustatymus iš esmės gali atitikti įprastą veikimą, pirmasis puslapis atidaromas per 56 sekundes (priklausomai nuo serverio konfigūracijos), o pirmasis kitų puslapių atidarymas iš esmės baigiamas per 12 sekundžių, o ne pirmas momentinis atidarymas.
Kai projekto funkcijos tampa sudėtingos ir failų skaičius padidėja, pirmasis puslapis bus atidarytas pirmą kartą po paskelbimo užtruks daugiau nei 30 sekundžių, o kitų puslapių atidarymas užtruks apie 10 sekundžių, o ne pirmas momentinis atidarymas.
Taip yra todėl, kad projektas nėra iš anksto sukompiliuotas išleidimo metu, bet dinamiškai kompiliuojamas, kai vartotojas pasiekia tinklalapį, o kai programų telkinys bus perdirbtas arba projekto failai bus pakeisti, jis bus iš naujo kompiliuojamas ir vėl bus lėtai "pirmą kartą", o tai yra netoleruotina.
Išankstinio kompiliavimo privalumai
- Spektaklis. Kompiliuotas kodas vykdomas daug greičiau nei scenarijų kalbos, tokios kaip ECMAScript ar VBScript, nes tai yra vaizdas, artimesnis mašininiam kodui ir nereikalauja papildomos analizės.
- Saugumas. Kompiliuotą kodą sunkiau pakeisti nei nekompiliuotą šaltinio kodą, nes jam trūksta skaitomumo ir abstrakcijos, kurią turi aukšto lygio kalbos. Be to, fuzzing įrankiai pagerina kompiliuoto kodo gebėjimą atsispirti atvirkštinės inžinerijos apdorojimui.
- Stabilumas. Kompiliavimo metu patikrinkite, ar kode nėra sintaksės klaidų, tipo saugos problemų ir kitų problemų. Pastebėjus šias klaidas kūrimo metu, kode galima pašalinti daug klaidų.
- Sąveika. Kadangi MSIL kodas palaiko bet kurią .NET kalbą, kode galima naudoti rinkinius, iš pradžių parašytus kitomis kalbomis. Pavyzdžiui, jei ASP.NET tinklalapį rašote C#, galite pridėti nuorodą į .dll failą, parašytą "Visual Basic".
ASP.NET Core iš anksto sukompiliuotas
Iš anksto sukompiliuota
Išankstinis kompiliavimas yra numatytasis ASP .Net Core būdas. Paskelbimo metu visi "Razor" rodiniai sistemoje yra iš anksto sukompiliuoti pagal numatytuosius nustatymus. Sukompiliuoto rodinio DLL vienodai pavadintas xxx.PrecompiledViews.dll arba xxx.Views.dll
Dinaminis kompiliavimas
Visą projektą lengva sukonfigūruoti į dinaminį kompiliavimą, tiesiog pridėkite konfigūracijos projektą MvcRazorCompileOnPublish su reikšme false
ASP.NET Išankstinis svetainės sudarymas
Mes naudojame "Visual Studio", kad paskelbtume svetainę šiais būdais:
Parinkties "Leisti atnaujinti šią iš anksto sukompiliuotą svetainę" reikšmė Kai skelbiame .Net žiniatinklio projektą, apskritai, visi . CS failą, kuris automatiškai sugeneruos DLL dinaminių nuorodų biblioteką, kuri gali labai gerai apsaugoti svetainės šaltinio kodą, nes serverio kodas paprastai dedamas į . Kadangi visi CS faile esantys DLL failai yra sugeneruoti, tada įkelkite juos į serverį, kiti negali lengvai jų atidaryti!
Tačiau kiti failai, tokie kaip ashx, aspx ir kiti failai, kas jame yra, yra tai, kas yra, kiti gali atidaryti šiuos failus, kad peržiūrėtų, nors kiti nemato CS kodo, bet vis tiek gali matyti HTML kodą arba kai kuriuos serverio valdiklius ir susijusius atributus ASPX faile; Toks failas kaip ashx yra lygiavertis CS failui, o jame esantis kodas gali būti lengvai matomas;
Todėl . CS failai yra saugūs, tačiau ASPX, ashx ir kiti failai nėra saugūs; Taigi, ar yra būdas padaryti į serverį įkeltus žiniatinklio failus saugius? Yra būdas, tai yra, skelbiant, nepažymėkite "Leisti atnaujinti šią iš anksto sukompiliuotą svetainę";
Pažymėkite Leisti šios iš anksto sukompiliuotos svetainės naujinimus
Jei paskelbdami žiniatinklį pažymėsite "Leisti atnaujinti šią iš anksto sukompiliuotą svetainę", rezultatas bus toks: Visas svetainės failas, išskyrus visus CS failus, sukompiliuotus į DLL failus, kitus failus ir originalų, neturi jokių pakeitimų, kas yra viduje ar ką, kol kiti jį atidaro per Notepad, kodą, HTML kodą ir kt. viduje gali pamatyti kiti iš pirmo žvilgsnio.
Be to, kai vartotojai pirmą kartą apsilanko tam tikrame puslapyje, juos reikia sukompiliuoti, kad būtų galima rasti klaidų, o tada, jei nėra klaidų, jas galima pasiekti įprastai, todėl greitis taps gana lėtas. Apsilankymai po to yra normalūs;
Panaikinkite žymėjimą "Leisti šios iš anksto sukompiliuotos svetainės naujinimus"
Jei publikuodami žiniatinklį nepažymėsite "Leisti atnaujinti šią iš anksto sukompiliuotą svetainę", rezultatas bus toks: 1. Visi svetainėje esantys CS failai yra sukompiliuoti į DLL failus; 2. Be cs failo, kartu sukompiliuojami ir kiti failai, tokie kaip ASPX, ASHX ir kiti failai, ir kiekvienas failas sukuria atitinkamą *.compiled failą BIN kataloge;
Po to, jei peržiūrėsite ASPX, ASHX ir kitus failus per užrašų knygelę, juose nematysite jokio kodo, net HTML kodo žymėjimas nematomas, atidarykite tokį failą, jame yra tik viena teksto eilutė, turinys yra "Tai žymėjimo failas, sugeneruotas iš anksto sukompiliuoto įrankio, jo nereikėtų ištrinti!", o šių failų dydis yra 1kb;
Jei bandysite atidaryti svetainės puslapį, pamatysite, kad, išskyrus pirmąjį puslapį po projekto pradžios, kuris vis tiek trunka 1~2 sekundes (be EF), pirmą kartą vienas kitas puslapis atsidaro akimirksniu (EF pirmasis lėtumas yra už šio straipsnio ribų). Tai leidžia man jaustis kaip aš vėlai pamatyti iš anksto sukompiliuotas!
Čia slapta sakau, kad peržiūrų katalogo ištrynimas neturės įtakos normaliam tinklalapio atidarymui~ Kodėl neleidžiate jo ištrinti, nedrįstame klausti ir nedrįstame ištrinti.
Tikslas buvo pasiektas, ir buvo keletas pasekmių, kurias reikėjo išspręsti, pavyzdžiui, netvarka šiukšliadėžės kataloge.
Pasirinkite "Nesujungti". Sukurkite atskirus rinkinius kiekvienam puslapiui ir valdikliui", ir rezultatas yra daug daugiau App_Web_* .dll failų šiukšliadėžėje.
Išleidimo metu projekto šaknis sugeneruoja iš anksto sukompiliuotą App.config failą. Turinys yra toks:
Failas PrecompiledApp.config naudojamas stebėti, kaip programa diegiama ir ar ASP.NET reikia kompiliuoti failus užklausos metu. |