Dela via


Blazor värdmodeller för appar

Dricks

Det här innehållet är ett utdrag ur e-boken, Blazor för ASP NET Web Forms Developers for Azure, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

Blazor appar kan hanteras på något av följande sätt:

  • Klientsidan i webbläsaren på WebAssembly.
  • Serversidan i en ASP.NET Core-app.

BlazorWebAssembly Apps

BlazorWebAssembly appar körs direkt i webbläsaren på en WebAssembly-baserad .NET-körning. BlazorWebAssembly appar fungerar på ett liknande sätt som JavaScript-ramverk i klientdelen, till exempel Angular eller React. Men i stället för att skriva JavaScript skriver du C#. .NET-körningen laddas ned med appen tillsammans med appsammansättningen och eventuella nödvändiga beroenden. Inga webbläsar-plugin-program eller tillägg krävs.

De nedladdade sammansättningarna är normala .NET-sammansättningar, som du skulle använda i andra .NET-appar. Eftersom körningen stöder .NET Standard kan du använda befintliga .NET Standard-bibliotek med din BlazorWebAssembly app. Dessa sammansättningar körs dock fortfarande i webbläsarens säkerhetssandlåda. Vissa funktioner kan utlösa en PlatformNotSupportedException, som att försöka komma åt filsystemet eller öppna godtyckliga nätverksanslutningar.

När appen läses in startas .NET-körningen och pekar på appsammansättningen. Appens startlogik körs och rotkomponenterna återges. Blazor beräknar användargränssnittsuppdateringarna baserat på de renderade utdata från komponenterna. DOM-uppdateringarna tillämpas sedan.

Blazor WebAssembly

BlazorWebAssembly appar körs enbart på klientsidan. Sådana appar kan distribueras till statiska platsvärdlösningar som GitHub Pages eller Azure Static Website Hosting. .NET krävs inte alls på servern. Djuplänkning till delar av appen kräver vanligtvis en routningslösning på servern. Routningslösningen omdirigerar begäranden till appens rot. Den här omdirigeringen kan till exempel hanteras med hjälp av URL-omskrivningsregler i IIS.

Värd för din BlazorWebAssembly app med ASP.NET Core för att få alla fördelar Blazor med och fullständig .NET-webbutveckling. Genom att använda .NET på både klienten och servern kan du enkelt dela kod och skapa din app med hjälp av en konsekvent uppsättning språk, ramverk och verktyg. Blazor innehåller praktiska mallar för att konfigurera en lösning som innehåller både en BlazorWebAssembly app och ett ASP.NET Core-värdprojekt. När lösningen har skapats hanteras de byggda statiska filerna från Blazor appen av ASP.NET Core-appen med återställningsroutning redan konfigurerad.

Blazor Serverappar

Kom ihåg från arkitekturdiskussionen Blazor att Blazor komponenter återger sina utdata till en mellanliggande abstraktion som kallas för .RenderTree Ramverket Blazor jämför sedan vad som renderades med det som tidigare renderades. Skillnaderna tillämpas på DOM. Blazor komponenter frikopplas från hur deras renderade utdata tillämpas. Därför behöver själva komponenterna inte köras i samma process som processen med att uppdatera användargränssnittet. Faktum är att de inte ens behöver köras på samma dator.

I Blazor Serverappar körs komponenterna på servern i stället för på klientsidan i webbläsaren. Användargränssnittshändelser som inträffar i webbläsaren skickas till servern via en realtidsanslutning. Händelserna skickas till rätt komponentinstanser. Komponenterna renderas och det beräknade gränssnittets diff serialiseras och skickas till webbläsaren där det tillämpas på DOM.

Blazor Server

Servervärdmodellen Blazor kan låta bekant om du har använt ASP.NET AJAX och UpdatePanel kontrollen. Kontrollen UpdatePanel hanterar tillämpning av partiella siduppdateringar som svar på utlösarhändelser på sidan. När den utlöses begär de UpdatePanel en partiell uppdatering och tillämpar den sedan utan att behöva uppdatera sidan. Användargränssnittets tillstånd hanteras med hjälp av ViewState. Blazor Serverappar skiljer sig något eftersom appen kräver en aktiv anslutning till klienten. Dessutom underhålls alla användargränssnittstillstånd på servern. Bortsett från dessa skillnader är de två modellerna konceptuellt lika.

Så här väljer du rätt Blazor värdmodell

Som beskrivs i värdmodelldokumenten Blazorhar de olika Blazor värdmodellerna olika kompromisser.

Värdmodellen BlazorWebAssembly har följande fördelar:

  • Det finns inget .NET-beroende på serversidan. Appen fungerar fullt ut när den har laddats ned till klienten.
  • Klientresurser och -funktioner utnyttjas fullt ut.
  • Arbetet avlastas från servern till klienten.
  • En ASP.NET Core-webbserver krävs inte för att vara värd för appen. Serverlösa distributionsscenarier är möjliga (till exempel att hantera appen från ett CDN).

Nackdelarna BlazorWebAssembly med värdmodellen är:

  • Webbläsarfunktioner begränsar appen.
  • Kompatibel klientmaskinvara och programvara (till exempel WebAssembly support) krävs.
  • Nedladdningsstorleken är större och det tar längre tid att läsa in appar.
  • .NET-körnings- och verktygsstöd är mindre moget. Det finns till exempel begränsningar i .NET Standard-stöd och felsökning.

Blazor Servervärdmodellen erbjuder däremot följande fördelar:

  • Nedladdningsstorleken är mycket mindre än en app på klientsidan och appen läses in mycket snabbare.
  • Appen drar full nytta av serverfunktioner, inklusive användning av .NET-kompatibla API:er.
  • .NET på servern används för att köra appen, så befintliga .NET-verktyg, till exempel felsökning, fungerar som förväntat.
  • Tunna klienter stöds. Till exempel fungerar appar på serversidan med webbläsare som inte stöder WebAssembly och på resursbegränsade enheter.
  • Appens .NET/C#-kodbas, inklusive appens komponentkod, hanteras inte till klienter.

Nackdelarna Blazor med servervärdmodellen är:

  • Högre svarstid för användargränssnittet. Varje användarinteraktion innebär ett nätverkshopp.
  • Det finns inget offlinestöd. Om klientanslutningen misslyckas slutar appen att fungera.
  • Skalbarhet är en utmaning för appar med många användare. Servern måste hantera flera klientanslutningar och hantera klienttillstånd.
  • En ASP.NET Core-server krävs för att hantera appen. Serverlösa distributionsscenarier är inte möjliga. Du kan till exempel inte hantera appen från ett CDN.

Föregående lista över kompromisser kan vara skrämmande, men din värdmodell kan ändras senare. Oavsett vilken värdmodell som Blazor valts är komponentmodellen densamma. I princip kan samma komponenter användas med någon av värdmodellerna. Din appkod ändras inte. Det är dock en bra idé att introducera abstraktioner så att komponenterna fortsätter att vara värdar för modellagnostik. Abstraktionerna gör att din app enklare kan använda en annan värdmodell.

Distribuera din app

ASP.NET Web Forms-appar finns vanligtvis på IIS på en Windows Server-dator eller ett kluster. Blazor appar kan också:

  • Vara värd för IIS, antingen som statiska filer eller som en ASP.NET Core-app.
  • Utnyttja ASP.NET Cores flexibilitet för att finnas på olika plattformar och serverinfrastrukturer. Du kan till exempel vara värd för en Blazor app med hjälp av Nginx eller Apache i Linux. Mer information om hur du publicerar och distribuerar Blazor appar finns i dokumentationen Blazorom värd- och distribution .

I nästa avsnitt ska vi titta på hur projekten för BlazorWebAssembly och Blazor Server-apparna konfigureras.