Ao criar aplicativos da Web modernos, o desempenho é fundamental. Os usuários esperam aplicativos rápidos e responsivos, e mesmo um pequeno atraso pode causar frustração. O React, embora poderoso, às vezes pode sofrer gargalos de desempenho, especialmente à medida que os aplicativos crescem em tamanho e complexidade. Felizmente, existem várias técnicas para otimizar o desempenho, incluindo memoização, carregamento lento e muito mais.
Neste guia, detalharemos algumas das maneiras mais eficazes de otimizar o desempenho em seus aplicativos React. Abordaremos os conceitos básicos de memoização, carregamento lento e ferramentas como o React Profiler para ajudá-lo a identificar e corrigir gargalos. Vamos começar!
Pense em seu aplicativo da web como um carro – não importa o quão elegante ele pareça por fora, se não funcionar bem, a experiência do usuário será prejudicada. Em aplicativos React, esse “desempenho” refere-se à rapidez com que seus componentes são renderizados e com que eficiência eles são atualizados quando os dados ou o estado mudam.
À medida que seu aplicativo React é dimensionado, renderizar novamente componentes desnecessariamente ou carregar pacotes pesados de uma só vez pode levar a um desempenho mais lento. É por isso que aprender técnicas de otimização de desempenho do React é crucial para construir aplicativos suaves e de alto desempenho.
Memoização é uma palavra sofisticada que significa simplesmente armazenar em cache o resultado de uma chamada de função para que você não precise recalculá-lo todas as vezes. No React, a memorização ajuda a evitar novas renderizações desnecessárias, lembrando o resultado de uma renderização anterior e usando o resultado armazenado em cache se nada tiver mudado.
Vamos começar com React.memo. Este componente de ordem superior evita que um componente seja renderizado novamente se seus adereços não tiverem sido alterados.
const MyComponent = React.memo(function MyComponent({ name }) { console.log('Rendered'); returnHello, {name}; });
Neste exemplo, MyComponent só será renderizado novamente se o name prop for alterado. Se você passar o mesmo valor de nome, o React irá pular a renderização, melhorando o desempenho.
Em seguida, há useMemo. Este gancho é usado para memorizar cálculos ou valores caros dentro de seus componentes funcionais.
import { useMemo } from 'react'; function MyApp({ items }) { const expensiveCalculation = useMemo(() => { return items.reduce((total, item) => total item.value, 0); }, [items]); returnTotal Value: {expensiveCalculation}; }
Aqui, o cálculo só é executado novamente quando o array de itens muda, economizando tempo ao evitar recalcular o mesmo resultado em cada renderização.
O carregamento lento é uma técnica em que os componentes são carregados somente quando são necessários, em vez de carregar tudo antecipadamente. Isso ajuda a reduzir o tempo de carregamento inicial do seu aplicativo, tornando-o mais rápido.
React fornece uma função integrada chamada React.lazy() que permite carregar componentes sob demanda.
import React, { Suspense, lazy } from 'react'; const MyComponent = lazy(() => import('./MyComponent')); function App() { return (Loading...}> ); }
Neste exemplo, MyComponent só será carregado quando for realmente necessário. O componente Suspense fornece uma UI substituta (como um botão giratório de carregamento) enquanto o componente está sendo buscado, tornando a experiência do usuário mais suave.
É difícil otimizar algo que você não pode medir. É aí que entra o React Profiler. O React Profiler permite que você rastreie o desempenho de seus componentes, identifique renderizações lentas e meça o “custo” de novas renderizações.
Para usar o React Profiler, simplesmente envolva uma árvore de componentes com
import { Profiler } from 'react'; function onRenderCallback( id, // the "id" prop of the Profiler tree that has just committed phase, // either "mount" (if the tree just mounted) or "update" (if it re-rendered) actualDuration, // time spent rendering the committed update baseDuration, // estimated time to render the entire subtree without memoization startTime, // when React began rendering this update commitTime, // when React committed this update interactions // the Set of interactions belonging to this update ) { console.log({ id, phase, actualDuration }); } function MyApp() { return (); }
Usando o Profiler, você pode acompanhar quanto tempo cada componente leva para renderizar e encontrar áreas onde o desempenho pode ser melhorado, como novas renderizações desnecessárias.
Além da memoização e do carregamento lento, existem várias outras técnicas para melhorar o desempenho do seu aplicativo React:
const OtherComponent = lazy(() => import('./OtherComponent'));
const handleClick = useCallback(() => { console.log('Clicked'); }, []);
const handleScroll = debounce(() => { console.log('Scroll event'); }, 300);
Construir aplicativos React rápidos e eficientes requer uma combinação de técnicas. Usando memoization com React.memo e useMemo, você pode evitar novas renderizações desnecessárias. Componentes Carregamento lento com React.lazy permitem melhorar o tempo de carregamento buscando componentes apenas quando eles são necessários. O React Profiler ajuda a identificar gargalos de desempenho e otimizá-los.
Combinado com estratégias como divisão de código e otimização de eventos, você pode garantir que seus aplicativos React ofereçam uma experiência de usuário suave e responsiva, mesmo à medida que crescem em tamanho e complexidade.
Pronto para levar o desempenho do seu aplicativo React para o próximo nível? Experimente essas técnicas de otimização em seus projetos e observe a velocidade do seu aplicativo melhorar!
Se você gostou deste artigo, considere apoiar meu trabalho:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3