<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nullref</title>
    <description>The latest articles on DEV Community by Nullref (@nullref).</description>
    <link>https://dev.to/nullref</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9755%2F41d6f776-5098-41b5-9f18-9e6c8871d66f.png</url>
      <title>DEV Community: Nullref</title>
      <link>https://dev.to/nullref</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nullref"/>
    <language>en</language>
    <item>
      <title>Client-Side Rendering (CSR)</title>
      <dc:creator>Marcos Anjos</dc:creator>
      <pubDate>Thu, 24 Oct 2024 00:53:53 +0000</pubDate>
      <link>https://dev.to/nullref/client-side-rendering-csr-98j</link>
      <guid>https://dev.to/nullref/client-side-rendering-csr-98j</guid>
      <description>&lt;p&gt;&lt;em&gt;Client-Side Rendering&lt;/em&gt; (CSR) é uma técnica comum no desenvolvimento Web moderno, usada para criar aplicações interativas e dinâmicas. Com essa técnica retiramos do servidor a responsabilidade de renderizar a página e trazemos para o lado do cliente, deixando o servidor cuidar do que é mais importante para ele, as regras de negócio. Fazendo essa separação se fez possível oferecer uma experiência de usuário mais fluida, dinâmica e possibilita a criação de novos tipos de aplicações. As vantagens são diversas, mas  ao mesmo tempo há &lt;em&gt;trade-offs&lt;/em&gt; que devem ser avaliados em cada projeto se vale ou não a pena adotar essa técnica. &lt;/p&gt;

&lt;h3&gt;
  
  
  O que é &lt;em&gt;Client-Side Rendering&lt;/em&gt; (CSR)?
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Client-side rendering&lt;/em&gt; ou apenas CSR, é uma técnica de desenvolvimento de aplicações dinâmicas onde a renderização da interface ocorre no lado do cliente (navegador). Diferente de como era feito antes dessa técnica se tornar popular, onde o servidor era responsável por fazer esse papel de renderizar a página, retornando ao cliente um arquivo HTML com todo o conteúdo já montado. &lt;/p&gt;

&lt;p&gt;Com o CSR passamos o papel de renderizar a página para o navegador (cliente). O servidor apenas envia um arquivo HTML básico que internamente contém links para arquivos Javascript. Ao receber esse HTML o navegador faz download dos arquivos Javascript referenciados que são os responsáveis por renderizar o conteúdo da página. A vantagem do CRS é que uma vez carregado os arquivos Javascript o conteúdo pode ser atualizado dinamicamente sem depender de novas requisições ao servidor. Deixando a experiência de navegação mais fluida para usuário. O CSR é geralmente utilizado em aplicações onde há a necessidade de interações em tempo real ou conteúdos muito dinâmicos como, por exemplo, em &lt;em&gt;single-page applications&lt;/em&gt; (SPA). Sendo uma solução para páginas internas,  dashboards, ou sistemas onde não há a necessidade de SEO.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como &lt;em&gt;Client-Side Rendering&lt;/em&gt; funciona?
&lt;/h3&gt;

&lt;p&gt;Um exemplo de fluxo de renderização utilizando &lt;em&gt;Client-Side Rendering&lt;/em&gt;, seria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;O usuário acessa uma página web, que internamente envia uma requisição ao servidor.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03qgafwib89icr6avyem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03qgafwib89icr6avyem.png" alt="Barra de pesquisa" width="800" height="54"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O servidor recebe a requisição e responde enviando um HTML básico contendo praticamente  apenas links para arquivos JavaScript e CSS. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbieo31qu6lav1jsqh6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbieo31qu6lav1jsqh6x.png" alt="Código HTML" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O navegador faz o download desse HTML e, assim que terminado, envia novas requisições para baixar os arquivos JavaScript e CSS que estavam referenciados no HTML. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgtg5170ivg973a0jmcd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgtg5170ivg973a0jmcd.gif" alt="Console navegador requisições" width="844" height="496"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Com os arquivos JavaScript tendo sido baixados eles serão executados e o processo de renderizar a página será realizado. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl36h5yr652f998c6t1x9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl36h5yr652f998c6t1x9.gif" alt="Navegador carregando página" width="640" height="348"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A partir desse ponto, o JavaScript controla toda aplicação e as interações do usuário, atualizando o conteúdo da página de forma dinâmica, sem novas requisições ao servidor.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6twtab19d2nke5z0i3g3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6twtab19d2nke5z0i3g3.png" alt="Fluxo Client-Side Rendering" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vantagens do &lt;em&gt;Client-Side Rendering&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Velocidade: A navegação entre as páginas dentro de uma CSR é extremamente rápida, pois não há a necessidade de fazer várias requisições ao servidor após o carregamento inicial.&lt;/li&gt;
&lt;li&gt;Experiência do Usuários: uso CSR são altamente inteiráveis e apresentam ótimo desempenho, proporcionando uma experiência semelhante a aplicativos nativos.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Separation of Concerns&lt;/em&gt;: O CSR possibilita a separação entre o Front-end e Back-end, permitindo que o Front-end seja completamente gerido pelo JS, enquanto Back-end cuida apenas dos dados e da lógica do negócio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Desvantagens do &lt;em&gt;Client-Side Rendering&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Alta carga de JS: Em aplicações grandes, os arquivos JS podem se tornar muito pesados, o que pode prejudicar a experiência do usuário, especialmente no carregamento inicial da aplicação.&lt;/li&gt;
&lt;li&gt;Problemas de SEO: Como o conteúdo da página renderizado no lado do cliente, os motores de busca têm dificuldades em indexar o conteúdo, já que eles precisam do HTML renderizado e numa aplicação com CSR o HTML está praticamente vazio. Isso pode ser uma desvantagens para aplicações que dependem de SEO como &lt;em&gt;landing pages&lt;/em&gt; e &lt;em&gt;e-commerces&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Dependente do cliente: Como a aplicação é executada no lado do cliente, há uma dependência de quanto recurso o mesmo possui, podendo afetar negativamente a experiência do usuário caso seu dispositivo tenha poucos recursos. Além disso, se o dispositivo estiver com a execução de JavaScript desabilitada a aplicação não ira funcionar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Neste artigo, apresentamos principais pontos importantes sobre o uso do CSR, apresentando os fundamentos e suas vantagens e desvantagens. Através do fluxo CSR, conhecemos as etapas principais como que funciona o ciclo de vida do CSR. Podemos perceber a importância do JavaScript para proporcionar as aplicações que rodam inteiramente no lado do cliente.  Apesar dos benefícios do CSR relacionados a experiência do usuário, fica evidente que esse técnica de renderização possui algumas desvantagens relacionado alta carga de JavaScript e problemas relacionados a SEO. &lt;/p&gt;

&lt;p&gt;Para contornar as limitações do CSR,  temos soluções como o &lt;em&gt;Static Site Generation&lt;/em&gt; (SSG) e &lt;em&gt;Server-Side Rendering&lt;/em&gt; (SSR). No SSG, as páginas são geradas de forma estática durante o período de &lt;em&gt;build&lt;/em&gt;, resultando em HTML já pronto para ser entregue ao cliente. E no caso do SSR, a renderização é feita no lado do servidor que responde com um HTML já renderizado para o cliente.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
