Skip to content

Performance

Edgar Mesquita edited this page Jan 26, 2026 · 5 revisions

Performance e Otimização

O foco do eQuantic.UI é entregar uma experiência de Single Page Application (SPA) com o mínimo de sobrecarga possível, aproveitando o poder do C# para gerar código frontend altamente otimizado.

🚀 Reconciliação e Virtual DOM

O sistema de Virtual DOM foi desenhado para ser eficiente e prever mudanças de estado.

Estratégia de Diffing (Atual)

Atualmente, o algoritmo de reconciliação opera com uma estratégia baseada em índice.

  • O reconciliador compara nós novos com antigos sequencialmente.
  • Key Property: A propriedade Key é utilizada para verificar identidade. Se a chave de um elemento mudar, o framework assume que é um elemento completamente novo e o recria, garantindo que estado incorreto não vaze entre elementos distintos.
  • Nota: A reordenação inteligente baseada em chaves (mover elementos no DOM em vez de substituir) é um alvo de otimização futura. Por enquanto, a identidade garante integridade, não necessariamente a movimentação mínima do DOM em listas reordenadas.

🧠 Gestão de Recursos (Memory Management)

Vazamentos de memória são mitigados através do uso inteligente de referências fracas e limpeza automática.

Event Listener Tracking

Os listeners de eventos são rastreados utilizando WeakMap<HTMLElement, Map<string, EventHandler>>.

  • Referências Fracas: O WeakMap permite que elementos DOM sejam coletados pelo Garbage Collector quando removidos da árvore, mesmo que o framework ainda tenha referências internas aos seus handlers.
  • Cleanup Automático: Ao remover um componente, o reconciliador tenta desligar listeners explicitamente, mas o WeakMap atua como uma rede de segurança para evitar vazamentos em ciclos de vida complexos.

📦 Bundling e Carregamento

Estratégia Híbrida com Bun

O SDK utiliza o Bun embarcado para processar o output final.

  • Performance de Build: O Bun processa arquivos TS/JS até 10x mais rápido que ferramentas baseadas em Node.js.
  • Tree-shaking: Código morto é removido automaticamente durante o build.
  • Minificação: Scripts são entregues comprimidos.

Code Splitting

  • Chunks por Página: Cada página gera seu próprio bundle JS. O usuário baixa apenas o necessário para a rota atual.
  • Lazy Loading: Componentes complexos e bibliotecas podem ser carregados sob demanda.

Clone this wiki locally