Servidor Blazor nos cenários e desempenho do .NET Core 3.0

Desde o lançamento do Blazor Server com o .NET Core 3.0, no mês passado, muitas pessoas compartilharam sua empolgação conosco sobre a capacidade de criar uma interface de usuário da Web do lado do cliente apenas com .NET e C #. Ao mesmo tempo, também ouvimos muitas perguntas sobre o que é o Blazor Server, como ele se relaciona com o Blazor WebAssembly e quais cenários o Blazor Server é mais adequado. Você deve escolher o Blazor Server para suas necessidades de interface do usuário da Web do lado do cliente ou aguardar o Blazor WebAssembly? Esta publicação procura responder a essas perguntas e fornecer informações sobre o desempenho do Blazor Server em grande escala e como visualizamos o Blazor evoluindo no futuro.

O que é o Blazor Server?


Os aplicativos do servidor Blazor hospedam componentes Blazor no servidor e lidam com interações da interface do usuário em uma conexão SignalR em tempo real. À medida que o usuário interage com o aplicativo, os eventos da interface do usuário são enviados ao servidor pela conexão para serem tratados pelos vários componentes que compõem o aplicativo. Quando um componente lida com um evento da interface do usuário, ele é renderizado com base em seu estado atualizado. O Blazor compara a saída recém-renderizada com a que foi renderizada anteriormente e envia as alterações de volta ao navegador e as aplica ao DOM.



Como os aplicativos do Blazor Server são executados no .NET Core no servidor, eles desfrutam de todos os benefícios da execução no .NET Core, incluindo excelente desempenho em tempo de execução e ferramentas. Os aplicativos do Blazor Server podem aproveitar todo o ecossistema das bibliotecas .NET Standard sem nenhuma limitação imposta pelo navegador.

Quando devo usar o Blazor Server?


O Blazor Server permite adicionar uma interface do usuário interativa rica aos seus aplicativos .NET hoje, sem a necessidade de escrever JavaScript. Se você precisar da interatividade de um aplicativo de página única no seu aplicativo .NET, o Blazor Server é uma ótima solução.

O Blazor Server pode ser usado para escrever aplicativos completamente novos ou para complementar aplicativos MVC e Razor Pages existentes. Não há necessidade de reescrever a lógica do aplicativo existente. O Blazor foi projetado para trabalhar em conjunto com o MVC e o Razor Pages, não para substituí-los. Você pode continuar usando o MVC e o Razor Pages para suas necessidades de renderização do servidor enquanto usa o Blazor para interações da interface do usuário do lado do cliente.

O Blazor Server funciona melhor em cenários em que você possui uma conexão de rede de baixa latência confiável, que normalmente é alcançada quando o cliente e o servidor estão geograficamente no mesmo continente. Aplicativos que exigem atualizações instantâneas de fidelidade extremamente alta a cada pequeno movimento do mouse, como jogos em tempo real ou aplicativos de desenho, não são adequados para o Blazor Server. Como os aplicativos do Blazor Server requerem uma conexão de rede ativa, os cenários offline não são suportados.

O Blazor Server também é útil quando você deseja descarregar o trabalho do cliente para o servidor. Os aplicativos do Blazor Server requerem apenas um pequeno download para estabelecer a conexão com o servidor e processar interações da interface do usuário. Todo o trabalho árduo de executar a lógica do aplicativo e renderizar a interface do usuário é feito no servidor. Isso significa que os aplicativos do Blazor Server são carregados rapidamente, mesmo quando a funcionalidade do aplicativo aumenta. Como o lado do cliente de um aplicativo Blazor Server é muito pequeno, é uma ótima solução para aplicativos que precisam ser executados em dispositivos de baixa potência.

Usando o Blazor Server em escala


O Blazor Server pode escalar de pequenas aplicações internas de linha de negócios a grandes aplicativos de escala da Internet. Enquanto o .NET Core 3.0 ainda estava em pré-visualização, testamos o Blazor Server para ver como são suas características de escala de linha de base. Colocamos um aplicativo Blazor Server sob carga com clientes ativos e monitoramos a latência das interações do usuário. Em nossos testes, uma única instância Standard_D1_v2 no Azure (1 vCPU, memória de 3,5 GB) pode lidar com mais de 5.000 usuários simultâneos sem nenhuma degradação na latência.

Uma instância Standard_D3_V2 (4 vCPU, 14GB de memória) processou mais de 20.000 clientes simultâneos. O principal gargalo para lidar com carga adicional foi a memória disponível. Você verá esse nível de escala em seu próprio aplicativo? Isso dependerá em grande parte da quantidade de memória adicional que seu aplicativo requer por usuário. Mas para muitos aplicativos, acreditamos que esse nível de expansão é bastante razoável. Também planejamos publicar atualizações adicionais sobre melhorias na escalabilidade do Blazor Server nas próximas semanas. Portanto, fique atento!

O que é o Blazor WebAssembly?


O Blazor é uma estrutura de interface do usuário que pode ser executada em diferentes ambientes. Ao criar componentes da interface do usuário usando o Blazor, você tem a flexibilidade de escolher como e onde eles serão hospedados e executados. Além de executar os componentes da interface do usuário no servidor com o Blazor Server, você pode executar esses mesmos componentes no cliente com o Blazor WebAssembly. Essa flexibilidade significa que você pode se adaptar às necessidades de seus usuários e evitar o risco de estar vinculado a um modelo específico de hospedagem de aplicativos.

Os aplicativos Blazor WebAssembly hospedam componentes no navegador usando um tempo de execução .NET baseado no WebAssembly. Os componentes lidam com eventos da interface do usuário e executam sua lógica de renderização diretamente no navegador. Os aplicativos Blazor WebAssembly usam apenas padrões da Web abertos para executar o código .NET do lado do cliente, sem a necessidade de plugins de navegador ou transpilação de código. Assim como nos aplicativos Blazor Server, a estrutura do Blazor lida com a comparação da saída recém-renderizada com o que foi renderizado anteriormente e atualiza o DOM de acordo, mas com o Blazor WebAssembly a renderização da interface do usuário é gerenciada no lado do cliente.



Quando devo usar o Blazor WebAssembly?


O Blazor WebAssembly ainda está em visualização e ainda não está pronto para uso em produção. Se você está procurando uma solução pronta para produção, o Blazor Server é o que recomendamos.

Quando o Blazor WebAssembly for lançado (maio de 2020), ele permitirá a execução de componentes Razor e código .NET no navegador do dispositivo do usuário. Os aplicativos Blazor WebAssembly ajudam a descarregar o trabalho do servidor para o cliente. Um aplicativo Blazor WebAssembly pode alavancar os recursos de computação, memória e armazenamento do dispositivo cliente, além de outros recursos disponibilizados pelas APIs padrão do navegador.

Os aplicativos Blazor WebAssembly não exigem o uso do .NET no servidor e podem ser usados ​​para criar sites estáticos. Um aplicativo Blazor WebAssembly é apenas um monte de arquivos estáticos que podem ser hospedados usando qualquer solução de hospedagem de site estático, como páginas do GitHub ou Hospedagem de site estática do Azure. Quando combinado com um trabalhador de serviço, um aplicativo Blazor WebAssembly pode funcionar completamente offline.

Quando combinado com o .NET no servidor, o Blazor WebAssembly permite o desenvolvimento na Web com pilha completa. Você pode compartilhar código, aproveitar o ecossistema .NET e reutilizar suas habilidades e infraestrutura .NET existentes.

A inclusão de um tempo de execução .NET no seu aplicativo da Web aumenta o tamanho do aplicativo, o que afetará o tempo de carregamento. Embora existam várias técnicas para atenuar isso (pré-renderização no servidor, cache HTTP, vinculação de IL, etc.), o Blazor WebAssembly pode não ser a melhor opção para aplicativos que são muito sensíveis ao tamanho do download e ao tempo de carregamento.

Os aplicativos Blazor WebAssembly também exigem um navegador que suporte o WebAssembly. O WebAssembly é suportado por todos os navegadores modernos, incluindo navegadores móveis e de desktop. No entanto, se você precisar oferecer suporte a navegadores mais antigos sem o suporte ao WebAssembly, o Blazor WebAssembly não é para você.

O Blazor WebAssembly é otimizado para cenários de renderização da interface do usuário, mas atualmente não é ótimo para executar cargas de trabalho intensivas da CPU. Atualmente, os aplicativos Blazor WebAssembly usam um interpretador .NET IL para executar seu código .NET, que não tem o mesmo desempenho que um tempo de execução .NET nativo com compilação JIT. Estamos trabalhando para resolver melhor esse cenário no futuro, adicionando suporte para compilar seu código .NET diretamente no WebAssembly, em vez de usar um intérprete.

Você pode mudar de idéia mais tarde


Independentemente de você escolher o Blazor Server ou o Blazor WebAssembly, você sempre pode mudar de idéia mais tarde. Todos os aplicativos Blazor usam um modelo de componente comum, os componentes Razor. Os mesmos componentes podem ser hospedados em um aplicativo Blazor Server ou em um aplicativo Blazor WebAssembly. Portanto, se você começar com um modelo de hospedagem Blazor e depois decidir que deseja mudar para um modelo diferente, isso é muito simples.

O que vem por Blazor?


Depois de enviar o Blazor WebAssembly, planejamos expandir o Blazor para oferecer suporte não apenas aos aplicativos da Web, mas também aos PWAs (Progressive Web Apps), aplicativos híbridos e até aplicativos totalmente nativos.

  • PWAs Blazor: os PWAs são aplicativos da Web que utilizam os mais recentes padrões da Web para fornecer uma experiência mais nativa. Os PWAs podem suportar cenários offline, notificações push e integrações de SO, como suporte para fixar o aplicativo na tela inicial ou no menu Iniciar do Windows.
  • Blazor Hybrid: aplicativos híbridos são aplicativos nativos que usam tecnologias da Web para a interface do usuário. Os exemplos incluem aplicativos Electron e aplicativos móveis que são renderizados em uma visualização da Web. Os aplicativos Blazor Hybrid não são executados no WebAssembly, mas usam um tempo de execução .NET nativo como o .NET Core ou o Xamarin. Você pode encontrar uma amostra experimental do Blazor with Electron no GitHub.
  • Blazor Native: hoje, os aplicativos Blazor renderizam HTML, mas o renderizador pode ser substituído para renderizar controles nativos. Um aplicativo Blazor Native é executado nativamente nos dispositivos e usa uma abstração de interface do usuário comum para renderizar controles nativos para esse dispositivo. Isso é muito semelhante ao funcionamento de estruturas como o Xamarin Forms ou o React Native.

Atualmente, esses três esforços são experimentais. Esperamos ter visualizações oficiais de suporte para aplicativos Blazor PWAs e Blazor Hybrid usando Electron no período de tempo do .NET 5 (novembro de 2020). Ainda não existe um roteiro para o suporte ao Blazor Native, mas é uma área que estamos investigando ativamente.

Sumário


Com o .NET Core 3.0, você pode criar uma interface do usuário interativa rica do lado do cliente hoje com o Blazor Server. O Blazor Server é uma ótima maneira de adicionar funcionalidade do lado do cliente aos aplicativos da Web novos e existentes, usando suas habilidades e ativos .NET existentes. O Blazor Server foi desenvolvido para ser dimensionado para todas as necessidades de aplicativos da web. O Blazor WebAssembly ainda está em pré-visualização, mas deve ser lançado em maio do próximo ano. No futuro, esperamos continuar evoluindo o Blazor para oferecer suporte a PWAs, aplicativos híbridos e aplicativos nativos. Por enquanto, esperamos que você experimente o Blazor Server instalando o .NET Core 3.0 !

Source: https://habr.com/ru/post/pt473146/


All Articles