<?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: Bruno Carvalho</title>
    <description>The latest articles on DEV Community by Bruno Carvalho (@brncarvalho).</description>
    <link>https://dev.to/brncarvalho</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%2Fuser%2Fprofile_image%2F1143074%2F72dd302b-ab24-4753-947c-7a10eda21dbb.jpeg</url>
      <title>DEV Community: Bruno Carvalho</title>
      <link>https://dev.to/brncarvalho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brncarvalho"/>
    <language>en</language>
    <item>
      <title>Como lidar com performance em aplicações ReactJS</title>
      <dc:creator>Bruno Carvalho</dc:creator>
      <pubDate>Thu, 21 Dec 2023 01:15:00 +0000</pubDate>
      <link>https://dev.to/brncarvalho/como-lidar-com-performance-em-aplicacoes-reactjs-419h</link>
      <guid>https://dev.to/brncarvalho/como-lidar-com-performance-em-aplicacoes-reactjs-419h</guid>
      <description>&lt;p&gt;Hoje vamos falar sobre performance em aplicações web utilizando ReactJS!!&lt;/p&gt;




&lt;h2&gt;
  
  
  Problemática
&lt;/h2&gt;

&lt;p&gt;Atualmente é bem comum vermos aplicações muito focadas apenas em estilizações complexas ou com componentes que não possuem abstrações corretas e se tornam verdadeiros monstros, seja para manter ou realizar novas implementações. Tais práticas afetam diretamente algo que chamo de "alma do frontend", que é a boa experiência e praticidade para o usuário. Afinal no fim do dia, o que precisamos é construir um produto que cumpra seu papel e que o usuário se sinta bem utilizando.&lt;/p&gt;

&lt;p&gt;Levando em conta os problemas citados, a performance da nossa aplicação é algo que é muito afetada por tais problemas e muitas vezes passa desapercebido no dia a dia, seja pelo tempo de entrega das features, prioridade de implementações, etc...&lt;/p&gt;




&lt;h2&gt;
  
  
  Problemas comuns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  - Renderizações desnecessárias
&lt;/h3&gt;

&lt;p&gt;O React implementa por conta própria o algoritmo de reconciliação, onde é feita a comparação entre DOM e virtual DOM, e assim feita a atualização de UI da aplicação. Porém, quando atualizamos um data ou props dos nossos componentes, pode ser que um novo gatilho para renderizar o componente seja disparado e componentes que não são afetados pela mudança sofram uma nova renderização, consumindo tempo e recursos de computação.&lt;/p&gt;

&lt;p&gt;Para tentar solucionar esse problema, podemos utilizar hooks como &lt;code&gt;useEffect&lt;/code&gt; e &lt;code&gt;useMemo&lt;/code&gt; para que o componente ou valor sejam atualizados quando alguma prop ou data seja de fato alterada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atenção&lt;/strong&gt;: cuidado com o uso de hooks como, &lt;code&gt;useEffect&lt;/code&gt;, &lt;code&gt;useCallback&lt;/code&gt;, &lt;code&gt;useMemo&lt;/code&gt;. Por possuírem um array de dependências, podem receber gatilhos de re-renderização que irão comprometer ainda mais o processo de otimização da UI.&lt;/p&gt;




&lt;h3&gt;
  
  
  - Renderização de listas
&lt;/h3&gt;

&lt;p&gt;Renderizar listas é uma prática bem comum em aplicações, e devido ao volume de dados que precisam ser listados, pode impactar diretamente na performance de renderização.&lt;/p&gt;

&lt;p&gt;Nesse contexto, podemos utilizar a função &lt;code&gt;React.memo&lt;/code&gt; para que o nosso componente de listagem seja re-renderizado apenas quando suas props sofram alterações. E também, de suma importância, utilizar a prop &lt;code&gt;key={}&lt;/code&gt; para cada item da nossa listagem, para que o React possa encontrar facilmente cada elemento e assim otimizar a manipulação do DOM.&lt;/p&gt;




&lt;h3&gt;
  
  
  - Má gestão de estados
&lt;/h3&gt;

&lt;p&gt;É bem comum encontrarmos componentes com inúmeros estados, sejam eles locais ou globais (utilizando &lt;code&gt;contextAPI&lt;/code&gt;, por exemplo).&lt;br&gt;
Quando não se tem o mapeamento correto da necessidade de cada estado e de como esse estado é atualizado, podem ocorrer inúmeras atualizações inúteis de UI ou até mesmo mudanças inesperadas de valores de propriedades.&lt;/p&gt;




&lt;h3&gt;
  
  
  - Otimização de imagens
&lt;/h3&gt;

&lt;p&gt;Imagens são de extrema importância nas nossas aplicações, mas se forem apenas "jogadas" dentro de nossos componentes, com certeza nos trará dores de cabeça quando falamos de performance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faça a compressão das imagens, para que o tamanho deles seja otimizado sem que percam qualidade significativa;&lt;/li&gt;
&lt;li&gt;Use tamanhos responsivos para que a imagem se adapte melhor ao dispositivo que o usuário está utilizando;&lt;/li&gt;
&lt;li&gt;Utilize lazy loading para que a imagem seja carregada apenas quando necessário.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Ficou bem longo e denso o post 😅, e ainda existem diversos pontos que podemos abordar sobre performance (pretendo futuramente escrever sobre debbubing e utilização da react dev tools).&lt;/p&gt;

&lt;p&gt;Se você chegou até aqui, agradeço pela leitura, esse é meu primeiro na comunidade e aceito qualquer feedback para melhorar os posts.&lt;/p&gt;

&lt;p&gt;Sintam-se à vontade para entrar em contato comigo: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/bruno-carvalho-silva46/"&gt;Linkedin&lt;/a&gt;&lt;br&gt;
&lt;a href="//brn.carvalho@icloud.com"&gt;Email&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/brunoocrv"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>react</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
