Otimização de Performance em Apps Mobile com Expo e React Native
- react native
- expo
- performance
- mobile
- javascript
Por que performance mobile é diferente
Dispositivos móveis têm CPU, memória e bateria limitados. Um app lento não é só uma má experiência — ele é desinstalado. Otimizar React Native exige entender onde os gargalos realmente estão.
1. Evite re-renders desnecessários
O principal vilão de performance em React é renderizar componentes sem necessidade.
// Ruim: cria nova referência a cada render
<FlatList renderItem={({ item }) => <Card item={item} />} />
// Bom: componente estável com memo
const CardItem = memo(({ item }: { item: Item }) => <Card item={item} />);
<FlatList renderItem={({ item }) => <CardItem item={item} />} />
Use useMemo e useCallback apenas onde há custo real de computação — não indiscriminadamente.
2. Listas com FlatList e FlashList
Para listas longas, prefira FlashList (Shopify) ao FlatList nativo — ela recicla células de forma mais eficiente e reduz o tempo de primeiro render em até 10x.
npx expo install @shopify/flash-list
3. Imagens otimizadas
- Use
expo-imageno lugar de<Image />do React Native: suporta cache agressivo, blurhash e formatos modernos (WebP, AVIF) - Sempre defina
widtheheightexplícitos para evitar layout shift
4. New Architecture (JSI + Fabric)
O Expo SDK 50+ habilita a New Architecture por padrão. Com ela, a comunicação JS↔Native deixa de passar pela bridge assíncrona e passa a usar JSI (JavaScript Interface), eliminando serialização e reduzindo latência em operações intensivas.
Ative no app.json:
{
"expo": {
"newArchEnabled": true
}
}
5. Profiling com Flashlight
O Flashlight (anteriormente PerfDog open-source) mede FPS, uso de CPU e memória diretamente no dispositivo — essencial para identificar gargalos reais antes de otimizar às cegas.
Checklist rápido
- [ ]
memonos componentes de lista - [ ]
FlashListpara listas com mais de 50 itens - [ ]
expo-imagepara todas as imagens - [ ] New Architecture habilitada
- [ ] Hermes engine ativo (padrão no Expo SDK 48+)
- [ ] Bundle analisado com
npx expo export --dump-sourcemap

