Introduzindo estratégias de renderização
Quando acessamos um site e ele aparece instantaneamente, ou, ao contrário, demora uma eternidade para carregar, a diferença está em como o conteúdo é entregue ao navegador. É nesse contexto que entram as estratégias de renderização. Conhecer diferentes estratégias de renderização e saber quando utilizá-las impacta diretamente na experiência do usuário e no planejamento da construção do nosso projeto.
Hoje, vamos abordar quatro diferentes estratégias, começando pelas duas primeiras. A primeira delas é o CSR, que é a renderização do lado do cliente. Nesse caso, o cliente é o navegador, que será responsável por renderizar a página. Tecnologias como React e Angular já nascem com padrões de client-side rendering, sendo ideais para single-page applications e aplicativos dinâmicos, como jogos, formulários, chats e páginas interativas.
Explorando o client-side rendering
Por exemplo, event handlers são eventos associados a elementos, como um botão com um evento de on-click ou um campo de entrada com um evento de on-change. Para implementar funcionalidades como arrastar e soltar elementos na tela, utilizamos JavaScript, pois o navegador entende HTML, CSS e JavaScript. Esses event handlers existem apenas no lado do cliente, no navegador, e não no servidor. Portanto, quando há event handlers, sabemos que eles precisam ser trabalhados no lado do cliente.
O navegador inicialmente carrega um HTML vazio. Ele começa recebendo um HTML vazio e, após receber o JavaScript, é que a página é renderizada. O navegador realiza um trabalho significativo de renderização, juntando tudo e exibindo na tela.
Analisando os pilares do client-side rendering
Existem três pilares fundamentais: o build, que gera um HTML vazio, o script JavaScript e o CSS. O servidor estático armazena esses arquivos, sem processá-los, aguardando que um usuário solicite o recurso. Quando o navegador faz o download do JavaScript, a página ganha vida. Ele entende que existe uma referência, como a tag root, onde deve renderizar os elementos. Durante a navegação fluida, quando a página muda sem recarregar, é o client-side rendering que está renderizando o novo conteúdo dentro da tag.
Os benefícios dessa estratégia incluem a proximidade com o usuário. Quanto mais próximo do usuário, melhor. O navegador, após o computador físico, é o que está mais próximo do usuário, proporcionando interatividade rápida. Os eventos ocorrem na camada do cliente, no navegador, melhorando a experiência de carregamento após o inicial, pois tudo acontece no navegador. Isso significa menos carga para o servidor, que não precisa processar nada além de servir os arquivos estáticos, ou assets.
Considerando as limitações do client-side rendering
Entretanto, existem contras. O carregamento inicial da página pode ser mais lento, especialmente com internet lenta, resultando em uma página em branco até que o JavaScript seja carregado e executado. Isso também prejudica o SEO (Search Engine Optimization), pois o HTML não é pré-renderizado no servidor. Ferramentas de busca, como os crawlers, enfrentam dificuldades para indexar páginas que dependem do JavaScript para serem renderizadas.
Quando um e-commerce ou blog não está bem ranqueado, ele não terá conversão nem muitos acessos, o que é importante. Portanto, devemos ser críticos ao escolher a estratégia. Isso depende de dispositivos mais modernos. Se o navegador faz todo o trabalho pesado e o usuário possui um celular básico, o poder de processamento é menor, resultando em lentidão. Se unirmos isso a uma internet lenta e a um dispositivo com limitações de recursos, a experiência do usuário será prejudicada. Devemos ter isso em mente, pois, conhecendo as ferramentas, seus prós e contras, saberemos exatamente o que usar quando surgir um problema.
Aplicando o client-side rendering em diferentes contextos
Existem páginas que são apenas single SPAs (Aplicações de Página Única). Às vezes, temos uma página que não necessita de muito SEO (Otimização para Motores de Busca). Podemos ter uma página inteira como single SPA sem nos preocuparmos muito com SEO. No entanto, em aplicações onde o SEO é prioridade, como em e-commerce, é crucial estar bem ranqueado. Caso contrário, será desclassificado pelos crawlers (robôs de busca), e os clientes não terão acesso. Com o Next.js, a boa notícia é que conseguimos uma abordagem mais híbrida, misturando com server-side rendering (renderização do lado do servidor). Vamos demonstrar isso.
No desenvolvimento de jogos, que são dinâmicos, é necessário o client-side rendering (renderização do lado do cliente). A analogia que podemos fazer é a seguinte: ao comprar um móvel em uma loja, ele vem desmontado em uma caixa de papelão. Levamos para casa e montamos, que é o trabalho do navegador. Essa analogia ajuda a lembrar do processo.
Explorando o server-side rendering
Temos também o conhecido server-side rendering. Anos atrás, tudo era processado do lado do servidor, com tecnologias como PHP, JSP, ASP, entre outras. No Next.js, por padrão, tudo é renderizado no servidor. Não precisamos fazer nada, pois ele já carrega dessa forma. O servidor recebe a requisição e gera o HTML completo para cada solicitação do usuário. Isso é muito bom para SEO e compatibilidade com dispositivos mais simples.
No servidor, durante o build, temos apenas arquivos, sem vida. Empacotamos isso, e ele vive no servidor. Quando o usuário faz uma requisição via navegador, o servidor a recebe e gera a página HTML estática, pronta, com os componentes, HTML e CSS. O navegador recebe essa página já pré-renderizada, o que é vantajoso, pois a exibição é rápida no carregamento inicial. O navegador não precisa unir todos os elementos para renderizar, pois já está pronto.
Avaliando os benefícios e desafios do server-side rendering
O SEO é melhor porque a página foi pré-renderizada. Os crawlers entendem melhor, pois a página já está pronta. Isso também reduz o esforço para dispositivos com limitações de hardware, pois o navegador consome menos memória ao baixar o HTML pronto. No entanto, a carga agora está do lado do servidor, que precisa processar tudo. Em aplicações com muitos acessos, o servidor pode ficar sobrecarregado. Existem formas de trabalhar para aumentar recursos e melhorar o tempo de resposta do navegador, mas a carga recai sobre o servidor, o que pode aumentar os custos com infraestrutura.
Se o servidor não tiver recursos suficientes ou estiver sobrecarregado, pode haver atrasos e lentidão na resposta, especialmente em eventos como a Black Friday. Além disso, a localização do servidor influencia na velocidade de acesso. Se o servidor estiver na Europa e o usuário no Brasil, o acesso será mais lento. Um servidor na América Latina seria mais rápido. No server-side rendering, o recarregamento da página é total, sem navegação fluida. Ao mudar de página ou link, tudo é renderizado novamente.