Porównanie architektury ASP.NET Web Forms i Blazor
Napiwek
Ta zawartość jest fragmentem książki eBook Blazor dla deweloperów formularzy internetowych platformy ASP NET dla platformy Azure, dostępnym na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.
Chociaż ASP.NET formularzy internetowych i Blazor mają wiele podobnych koncepcji, istnieją różnice w sposobie ich działania. W tym rozdziale przeanalizować wewnętrzne działania i architektury ASP.NET Web Forms i Blazor.
Formularze sieci Web ASP.NET
Struktura ASP.NET Web Forms jest oparta na architekturze skoncentrowanej na stronach. Każde żądanie HTTP dla lokalizacji w aplikacji jest oddzielną stroną, na której ASP.NET odpowiada. W miarę żądania stron zawartość przeglądarki jest zastępowana wynikami żądanej strony.
Strony składają się z następujących składników:
- Znaczniki HTML
- Kod w języku C# lub Visual Basic
- Klasa za kodem zawierająca funkcje logiki i obsługi zdarzeń
- Kontrolki
Kontrolki to jednostki interfejsu użytkownika internetowego wielokrotnego użytku, które można programowo umieszczać i korzystać ze strony. Strony składają się z plików, które kończą się .aspx zawierającymi znaczniki , kontrolki i kod. Klasy kodu znajdują się w plikach o tej samej nazwie podstawowej i rozszerzeniu .aspx.cs lub .aspx.vb , w zależności od używanego języka programowania. Co ciekawe, serwer internetowy interpretuje zawartość plików .aspx i kompiluje je przy każdej zmianie. Ta ponowna kompilacja występuje nawet wtedy, gdy serwer internetowy jest już uruchomiony.
Kontrolki można tworzyć za pomocą znaczników i dostarczać jako kontrolki użytkownika. Kontrolka użytkownika pochodzi z UserControl
klasy i ma podobną strukturę do strony. Znaczniki dla kontrolek użytkownika są przechowywane w pliku ascx . Towarzyszący kod za klasą znajduje się w pliku .ascx.cs lub .ascx.vb . Kontrolki można również kompilować całkowicie przy użyciu kodu, dziedzicząc z WebControl
klasy podstawowej lub CompositeControl
.
Strony mają również obszerny cykl życia zdarzeń. Każda strona zgłasza zdarzenia inicjowania, ładowania, prerendera i zwalniania zdarzeń, które występują, gdy środowisko uruchomieniowe ASP.NET wykonuje kod strony dla każdego żądania.
Kontrolki na stronie zazwyczaj są ogłaszane z powrotem na tej samej stronie, która przedstawiała kontrolkę, i przenoszą wraz z nimi ładunek z ukrytego pola formularza o nazwie ViewState
. Pole ViewState
zawiera informacje o stanie kontrolek w momencie ich renderowania i prezentowania na stronie, dzięki czemu środowisko uruchomieniowe ASP.NET można porównać i zidentyfikować zmiany w zawartości przesłanej do serwera.
Blazor
Blazor to platforma internetowego interfejsu użytkownika po stronie klienta podobna do struktur frontonu JavaScript, takich jak Angular lub React. Blazor obsługuje interakcje użytkowników i renderuje niezbędne aktualizacje interfejsu użytkownika. Blazornie jest oparta na modelu odpowiedzi na żądanie. Interakcje użytkownika są obsługiwane jako zdarzenia, które nie są w kontekście żadnego konkretnego żądania HTTP.
Blazor aplikacje składają się z co najmniej jednego głównego składnika renderowanego na stronie HTML.
Sposób, w jaki użytkownik określa, gdzie składniki powinny być renderowane i jak składniki są następnie połączone w celu interakcji użytkownika, jest specyficzny dla modelu hostingu.
Blazorskładniki to klasy platformy .NET, które reprezentują element interfejsu użytkownika wielokrotnego użytku. Każdy składnik zachowuje swój własny stan i określa własną logikę renderowania, która może obejmować renderowanie innych składników. Składniki określają procedury obsługi zdarzeń dla określonych interakcji użytkownika w celu zaktualizowania stanu składnika.
Gdy składnik obsługuje zdarzenie, Blazor renderuje składnik i śledzi zmiany w renderowanych danych wyjściowych. Składniki nie są renderowane bezpośrednio w modelu obiektów dokumentów (DOM). Zamiast tego są renderowane na reprezentację modelu DOM w pamięci o nazwie a RenderTree
, dzięki Blazor czemu można śledzić zmiany. Blazor porównuje nowo renderowane dane wyjściowe z poprzednimi danymi wyjściowymi, aby obliczyć różnice interfejsu użytkownika, które następnie są stosowane efektywnie do modelu DOM.
Składniki mogą również ręcznie wskazać, że powinny być renderowane, jeśli ich stan zmieni się poza normalnym zdarzeniem interfejsu użytkownika. Blazor używa elementu , SynchronizationContext
aby wymusić pojedynczy logiczny wątek wykonywania. Metody cyklu życia składnika i wszelkie wywołania zwrotne zdarzeń, które są wywoływane przez Blazor program, są wykonywane w tym elemencie SynchronizationContext
.