Aula 13 - Ciclo de Vida e Performance ⏳
Objetivo
Objetivo: Entender os momentos em que um componente "nasce", "vive" e "morre" no navegador, e como usar as funções de ciclo de vida para gerenciar recursos e otimizar a performance da aplicação.
1. O que é o Ciclo de Vida? 🧬
Todo componente no Svelte passa por fases. Conhecer essas fases permite que você execute código no momento exato (ex: buscar dados assim que o usuário entra na página).
As principais funções:
onMount: Executa logo após o componente ser renderizado pela primeira vez no DOM.onDestroy: Executa logo antes do componente ser destruído (removido da tela).beforeUpdate: Executa momentos antes do DOM ser atualizado.afterUpdate: Executa logo após o DOM ser sincronizado com os dados.
2. Fases do Componente (Mermaid) 📊
graph TD
A[Início] --> B[Script Executado]
B --> C[Renderização Initial]
C --> D[onMount]
D --> E{Dados mudaram?}
E -- Sim --> F[beforeUpdate]
F --> G[Sincroniza DOM]
G --> H[afterUpdate]
H --> E
E -- Não --> I[Componente removido]
I --> J[onDestroy]
J --> K[Fim]
3. O Poder do onMount 🔌
O onMount é a função mais utilizada. É o lugar perfeito para:
* Fazer chamadas de API.
* Interagir com bibliotecas externas (como mapas ou gráficos).
* Focar em um campo de input automaticamente.
<script>
import { onMount } from 'svelte';
onMount(() => {
console.log("O componente está pronto!");
// Código de inicialização aqui
});
</script>
4. Limpeza e Performance com onDestroy 🧹
Muitos bugs e lentidões acontecem porque esquecemos de "limpar" a bagunça ao sair de uma página.
import { onDestroy } from 'svelte';
const intervalo = setInterval(() => {
console.log('Rodando...');
}, 1000);
// Se não limparmos, o intervalo continuará rodando para sempre!
onDestroy(() => {
clearInterval(intervalo);
});
5. Simulação de Ciclo de Vida 💻
<div id="termynal" data-termynal>
<span data-ty="input"># Componente carregado no DOM</span>
<span data-ty="progress"></span>
<span data-ty>onMount executado!</span>
<span data-ty="input"># Usuário mudou de rota</span>
<span data-ty>onDestroy: Limpando memória...</span>
<span data-ty>✔ Componente removido com segurança.</span>
</div>
6. Mini-Projeto: Monitor de Performance (Timer) 🚀
Sua missão hoje:
1. Crie um componente que exiba um cronômetro na tela (segundos passando).
2. Use um setInterval iniciado dentro de uma função.
3. Garanta que o cronômetro pare e limpe o intervalo ao sair do componente usando onDestroy.
4. Adicione um onMount que mostre um alert("Bem-vindo ao Timer!") apenas uma vez.
Atenção
Não limpar timers ou listeners de eventos pode causar Memory Leaks, fazendo seu site ficar lento ou até travar o navegador do usuário após algum tempo de uso.
7. Exercício de Fixação 📝
- Qual a diferença entre o script principal do componente e a função
onMount? - Por que devemos usar
onDestroyao trabalhar comsetIntervalouaddEventListenerglobais? - Quando o
afterUpdateé disparado?
Próxima Aula: Vamos subir o nível com Boas Práticas e Arquitetura Frontend! 🏛️