Gdy w projekcie jest zbyt wiele stron, IIS uruchamia się i strona internetowa jest bardzo wolna przy pierwszym otwarciu, ponieważ projekt nie jest wstępnie skompilowany w momencie wydania, lecz dynamicznie kompilowany podczas odwiedzenia strony użytkownika. Jeśli chcesz poprawić wydajność swojej istniejącej strony i przeprowadzić sprawdzanie błędów, konieczne jest wyznaczenie "Prekompilacja podczas wydania" podczas publikacji projektu.
Wprowadzenie
W przypadku małych projektów publikacja według domyślnych ustawień może zasadniczo spełnić normalne warunki – pierwsza strona otwiera się w 56 sekund (w zależności od konfiguracji serwera), a pierwsze otwarcie pozostałych stron w 12 sekund, a nie pierwsze natychmiastowe otwarcie.
Gdy funkcje projektu stają się skomplikowane, a liczba plików wzrasta, otwarcie pierwszej strony przy pierwszym uruchomieniu po publikacji zajmie ponad 30 sekund, a pierwsze otwarcie pozostałych stron około 10 sekund, a nie pierwsze natychmiastowe otwarcie.
Dzieje się tak, ponieważ projekt nie jest wstępnie skompilowany w momencie wydania, lecz jest dynamicznie kompilowany podczas dostępu użytkownika do strony internetowej, a po ponownym wykorzystaniu puli aplikacji lub zmianie plików projektu, zostanie ponownie skompilowany i przejdzie przez powolny "pierwszy raz", co jest nie do zniesienia.
Korzyści z prekompilacji
- Występ. Kod skompilowany jest wykonywany znacznie szybciej niż języki skryptowe, takie jak ECMAScript czy VBScript, ponieważ jest to reprezentacja bliższa kodowi maszynowemu i nie wymaga dodatkowej analizy.
- Ochrona. Kod skompilowany jest trudniejszy do odtworzenia niż nieskompilowany kod źródłowy, ponieważ brakuje mu czytelności i abstrakcji, które mają języki wysokiego poziomu. Dodatkowo, narzędzia do fuzzingu zwiększają zdolność skompilowanego kodu do odporności na przetwarzanie wsteczne.
- Stabilność. Sprawdź kod pod kątem błędów składniowych, problemów z bezpieczeństwem pisania i innych kwestii podczas kompilacji. Wykrywając te błędy podczas budowania, wiele błędów można wyeliminować w kodzie.
- Interoperacyjność. Ponieważ kod MSIL obsługuje dowolny język .NET, możliwe jest użycie asemblów pierwotnie napisanych w innych językach. Na przykład, jeśli piszesz ASP.NET stronę w C#, możesz dodać odnośnik do pliku .dll napisanego w Visual Basic.
ASP.NET Core prekompilowany
Wstępnie skompilowane
Prekompilacja jest domyślnym sposobem dla ASP .Net Core. W momencie publikacji wszystkie widoki Razor w systemie są domyślnie wstępnie kompilowane. Skompilowany widok DLL jest jednolicie nazywany xxx.PrecompiledViews.dll lub xxx.Views.dll
Kompilacja dynamiczna
Łatwo skonfigurować cały projekt do kompilacji dynamicznej, wystarczy dodać projekt konfiguracyjny MvcRazorCompileOnPublish z wartością false
ASP.NET Wstępne opracowanie strony internetowej
Używamy Visual Studio do publikowania strony internetowej w następujący sposób:
Znaczenie opcji "Zezwalaj na aktualizacje tej prekompilowanej strony" Gdy publikujemy projekt .Net, ogólnie rzecz biorąc, wszystkie . CS, który automatycznie generuje dynamiczną bibliotekę linków DLL, która bardzo dobrze chroni kod źródłowy strony, ponieważ kod po stronie serwera jest zazwyczaj umieszczany w . Ponieważ pliki DLL w pliku CS są generowane, a potem przesyłane na serwer, inni nie mogą ich łatwo otworzyć!
Jednak inne pliki, takie jak ashx, aspx i inne pliki, są obecne w tym, czym są; inne mogą je otwierać, aby je zobaczyć, choć inni nie widzą kodu CS, ale nadal widzą kod HTML lub niektóre elementy sterujące serwerem i powiązane atrybuty w pliku ASPX; Plik taki jak ashx jest odpowiednikiem pliku CS, a kod w nim zawarty jest łatwo widoczny;
Zatem . Pliki CS są bezpieczne, ale pliki ASPX, ashx i inne nie są bezpieczne; Czy istnieje sposób, aby pliki internetowe przesłane na serwer były bezpieczne? Istnieje sposób, czyli podczas publikowania nie zaznaczaj "Zezwalaj na aktualizacje tej wstępnie skompilowanej strony";
Sprawdź Zezwalaj na aktualizacje tej wstępnie skompilowanej strony
Jeśli zaznaczysz "Pozwól na aktualizację tej prekompilowanej strony" podczas publikowania strony, to wynik wygląda tak: cały plik strony, poza wszystkimi plikami CS skompilowanymi do plików DLL, innymi plikami, a oryginalny plik nie zawiera żadnych zmian, co jest w środku ani co, dopóki inni otwierają go przez Notatnik, kod, kod HTML itd. w środku są widoczne od razu przez innych.
Dodatkowo, gdy użytkownicy po raz pierwszy odwiedzają daną stronę, muszą być kompilowane, aby znaleźć błędy, a jeśli nie ma błędów, można do nich uzyskać dostęp normalnie, więc prędkość staje się stosunkowo wolna. Wizyty po tym są normalne;
Odznacz "Zezwalaj na aktualizacje tej wstępnie skompilowanej strony"
Jeśli nie zaznaczysz "Zezwalaj na aktualizację tej prekompilowanej strony" podczas publikowania strony, wynik jest następujący: 1. Wszystkie pliki CS na stronie są kompilowane do plików DLL; 2. Oprócz pliku cs, inne pliki, takie jak ASPX, ASHX i inne, są również kompilowane razem, a każdy plik generuje odpowiadający mu plik *.compiled w katalogu BIN;
Następnie, jeśli przeglądasz pliki ASPX, ASHX i inne przez notatnik, nie zobaczysz w nich żadnego kodu, nawet znaczniki HTML nie są widoczne, otwórz taki plik, jest w nim tylko jedna linia tekstu, treść brzmi: "To jest plik znaczników wygenerowany przez prekompilowane narzędzie, nie powinien być usuwany!", a rozmiar tych plików to 1kb;
Jeśli spróbujesz otworzyć stronę internetową, zauważysz, że poza pierwszą stroną po rozpoczęciu projektu, która nadal trwa 1~2 sekundy (bez EF), pierwsze otwarcie każdej drugiej strony otwiera się natychmiast (pierwsze spowolnienie EF wykracza poza zakres tego artykułu). To sprawia, że czuję się, jakbym spóźnił się z wstępnym skompilowaniem!
Tutaj potajemnie mówię ci, że usunięcie katalogu Views nie wpłynie na normalne otwarcie strony~ Dlaczego nie pozwolisz go usunąć, nie odważymy się pytać i nie odważymy się go usunąć.
Cel został osiągnięty, a pojawiły się pewne skutki uboczne, które trzeba było rozwiązać, takie jak bałagan w katalogu koszy.
Wybierz "Nie łącz". Stwórz osobne asemblery dla każdej strony i kontroli", a efektem jest znacznie więcej App_Web_*.dll plików w bin.
W momencie wydania projekt root generuje plik PrecompiledApp.config. Treść jest następująca:
Plik PrecompiledApp.config służy do śledzenia, jak aplikacja jest wdrażana i czy ASP.NET potrzeba kompilacji jakichś plików w momencie zgłoszenia. |