“Software developers are students forever 🧠”
Sobre | Descrição | Instalação | Desafios | Tecnologias
Essa aplicação foi construída para aprender algumas técnicas de performance do React.
Uma nova renderização tem o seguinte fluxo:
- O React gera uma nova versão do componente que precisa ser "renderizado".
- Compara essa nova versão com a versão anterior já salva na página.
- Se houverem alterações, o React "renderiza" essa nova versão em tela.
Também ocorrem de três formas:
- Pai para filho: quando o componente PAI sofre alteração, o componente FILHO será atualizado.
- Propriedade: quando uma propriedade atualiza.
- Hooks: useState, useContext, useReducer, entre outros...
Técnica utilizada para performar componentes. Não deixa atualizar a renderização.
Trás alguns benefícios quando utilizado em:
- Componentes puros.
- Componentes que renderizam muito.
- Quando um componente renderiza com as mesmas props.
- Quando o projeto está de médio para grande.
Exemplo de aplicação:
export const ProductItem = memo(ProductItemComponent, (prevProps, nextProps) => {
return Object.is(prevProps.product, nextProps.product);
});
É uma forma para performar algo complexo (geralmente cálculos) dentro da aplicação.
Dois casos de uso são:
- Cálculos pesados.
- Igualdade referencial (quando passa uma informação a um componente filho).
Usado para igualdade referencial de funções. Utilizado geralmente quando se tem prop drilling.
Também deve-se transformar a função em uma constante:
const addToWishlist = useCallback(async (id: number) => {
console.log(id);
}, []);
Os dados devem ser formados sempre na chamada da API (quando possível) e não na exibição.
Evita processamento e gargalos.
No bundle React, todas as importações são carregadas. Com o Code Splitting é possível definir a importação somente quando o usuário for usar a funcionalidade, deixando assim a aplicação mais performática.
Exemplo:
const AddProductToWishlist = dynamic<AddProductToWishlistProps>(() => {
return import("./AddProductToWishlist").then((mod) => mod.AddProductToWishlist);
}, {
loading: () => <span>Carregando...</span>,
});
Carrega somente um número específico de itens para serem renderizados.
São úteis para UX e desempenho na aplicação.
Verifica quais dependências são maiores. Dessa forma é possível ver possíveis gargalos na aplicação durante o build.
O bundle pode ser visualizado abaixo. Nele o lodash se destaca:
Bundle Analyzer |
![]() |
# Instalar as dependências necessárias:
$ yarn
# Iniciar o servidor:
$ yarn server
# Iniciar o projeto:
$ yarn dev
Aplicabilidade das técnicas apresentadas acima.
by Douglas Scaini ❤️