Executando verificação de segurança...
0

Renderização Estática vs Dinâmica

Como revelado anteriormente, Server Components podem ser renderizados tanto em tempo de construção (estático) quanto em tempo de execução quando uma requisição chega (dinâmico). Isso é apenas o que você deve saver, mas que, infelizmente, tem muitos "ses" e "poréns".

Next.js faz uma tentativa de gerenciar isso automáticamente para você. O que eles fazem é renderizar de forma estática por padrão e automáticamente ativar a renderização dinâmica quando necessário ou quando você configurar. A renderização dinâmica será usada quando:

Eu tenho certeza que você lerá esses links para entender isso, esse artigo já está longo o suficiente sem isso. Uma coisa que você deve anotar, é que o comportamento difere quando você usa as funções nativas do Next.js para busca (fetch) de dados, cookies, headers e parâmetros de busca, em comparação com quando usa soluções próprias ou bibliotecas externas.

O Next.js não irá saber quando seu componente precisa ser dinâmico se você não usar as suas próprias features. Nesses casos, vocẽ deve configurar manualmente o comportamento de cache.

Prós e Contras com renderização no servidor

Como prometido há um tempo ao longo do artigo, nós vamos agora ver os prós e contras de renderização no lado do servidor. SSR tem muitos benefícios e poucos malefícios. As vantages podem vairar ligeiramente dependendo do tipo de renderização no servidor escolhido. Note que as vantagens de SSG podem ser diferentes das de SSR. Esses prós e contras são, em termos gerais, para conteúdos renderizados no lado do servidor.

Vantagens de renderizar dados no lado do servidor

Desvantagens de Renderizar dados no lado do servidor

  • Renderizando conteúdos nos servidores leva a uma carga maior, que resulta em despesas maiores com servidores
  • Servidores geralmente tem pouco suporte para bibliotecas de terceiros
  • Você não pode acessar funcionalidades do navegador, a localização do usuário, dispositivo e etc em um servidor.
  • O tempo de carregamento para navegação pode ser lento se os dados não são reutilizados e cada navegação resulta em uma página completamente nova (Essa desvantagem era um problema maior com soluções tradicionais de renderização no lado do servidor onde o conteúdo renderizado era raramente reutilizado).

Server components vêm com benefícios adicionais

Quando se trata de React Server Components, todos os prós e contras acima listados para SSR são aplicados, mas Server Components também tem algumas vantagens adicionais.

Um detalhe interessante é que todo Server Components já é pré-renderizado quando o cliente recebe uma aplicação. Isso significa que Server Components renderizados condicionalmente podem ser renderizados instantâneamente, mesmo quando dependem de dados da rede. Não é necessário esperar uma resposta da rede e gerenciar o estado de carregamento, mesmo nos casos onde o componente é renderizado condicionalmente em resposta a uma ação do usuário.

Lendo isso você deve estar preocupado com o tamanho do bundle. Mas as suas preocupações são injustificadas, pois código HTML não tem um grande impacto no tempo de carregamento. HTML é armazenável em cache, mais rápido para analisar (parse) e rodar que JavaScript e só uma fração do tamanho de imagens.

E como cereja do bolo, Server Components adicionam tamanho zero de bundle para dependências de JavaScript! Mesmo se você usar uma biblioteca não otimizada para remoção de código não utilizado (tree-shacking) de 250 kB, o código HTML resultante ainda incluirá 0 kB de JavaScript.

Server Components não são perfeitos

Que Server Components são incríveis todos estão de acordo, certo? A resposta é não. Existem algumas potenciais desvantages incovenientes.

Server Components precisam de novos conhecimentos. A migração do velho Pages Router para o novo App Router vem com uma completa nova forma de pensar que a maioria dos desenvolvedores não estão acostumados.

Não apenas o conhecimento dos desenvolvedores torna-se obsoleto, o código também. Apesar das novas versões do Next.js estarem totalmente compatíveis com o antigo Pages Router, os código que o usam vão virar código legado, assim como os antigos Class Components do React.

Algumas outras desvantagens também existem em relação à qualidade de código. Compartilhar código torna-se mais difícil quando a renderização é dividida ainda mais em renderização no cliente e no servidor. Código marcado com use client e a importanção de recursos exclusivos de servidor tornam mais trabalhoso aplicar DRY ao código.

Eu devo admitir também, apesar de opinativo, que a prop drilling dos Server Components não é a melhor solução em termos de legibilidade. No Next.js, Server Components não podem ser importados em um Client Component, o que significa que Server Components renderizados em Client Components devem ser passados como children e renderizados dessa forma. Isso funciona e não é novo, mas pode ser um pouco complicado de se adaptar.

Conclusão

A web começou com HTML recebido de um servidor com muito pouco JavaScript. O tempo passou e depois de várias voltas e quatro diferentes soluções, como single page applications (SPAs), server side rendering (SSR) e static site generation (SSG), o React agora evoluiu com o uso dos Server Components.

O Next.js oferece o Pages Router como legado que usa as velhas opções de renderização juntas com uma estratégia de geração estática incremental (ISR). Com o advento dos Server Components, ele agora oferece o novo App Router que permite otimizar a renderização a nível de componente com os Server Components.

Entre todos os benefícios dos Server Components, nós temos o pequeno tamanho de bandle, rápido tempo de carregamento das páginas, ótima compatibilidade com SEO e suporte de navegadores, melhoras de UX e a possibilidade de usar dados sensíveis no servidor. Além disso, podemos obter renderização instantânea para componentes renderizados condicionalmente, sem a necessidade de exibir qualquer spinner ou skeleton para indicar carregamento.

Carregando publicação patrocinada...
1
0