Analisar vazamentos de memória com agentes de IA

Com o Chrome DevTools para agentes, seu agente de programação pode analisar e corrigir vazamentos de memória do lado do cliente (incluindo JavaScript e WebAssembly) no seu aplicativo. Ao automatizar a coleta e a análise de snapshots de heap, seu agente pode identificar objetos que não estão sendo coletados como lixo de forma adequada e sugerir refatoração de código direcionada.

Em um fluxo de trabalho de agente, o agente de programação tira vários snapshots em diferentes estados do aplicativo e usa ferramentas de análise especializadas.

Padrões comuns de vazamento de memória

A análise de memória se concentra em encontrar padrões comuns de vazamento, incluindo:

  • Listeners de eventos não limpos:listeners de eventos anexados a objetos globais (como window ou document) que impedem a coleta de lixo.
  • Nós DOM desconectados:nós removidos da árvore de documentos, mas ainda referenciados por uma variável JavaScript.
  • Variáveis globais não intencionais:variáveis declaradas sem escopo adequado que permanecem na memória para sempre.
  • Closures:closures que mantêm referências a objetos grandes no próprio escopo sem intenção.
  • Estruturas de dados sem limites:estruturas de dados usadas para armazenamento em cache que crescem sem limites.

Considerações para análise de memória

Ao usar a análise de memória, tenha em mente o seguinte:

  • Não leia snapshots brutos diretamente:não permita que o agente leia arquivos .heapsnapshot brutos diretamente. Eles são muito grandes e excedem os limites de contexto. A habilidade de depuração de vazamento de memória instrui explicitamente os agentes a evitar ler esses arquivos.

  • A metodologia de três snapshots:para encontrar vazamentos de maneira confiável, o agente geralmente precisa capturar três snapshots: um de referência antes da ação, um de destino após a ação e um final depois de reverter a ação. Algumas ações, como as acionadas por timers (setTimeout) ou animações (requestAnimationFrame), ocorrem sem interação do usuário e podem não exigir uma etapa de reversão.

    Algumas ações, como as acionadas por timers (setTimeout) ou animações (requestAnimationFrame), ocorrem sem interação do usuário e ainda podem aumentar o uso da memória.

  • Verifique antes de corrigir:sempre revise as descobertas do agente para garantir que as ações propostas sejam aplicáveis e corretas para a lógica do seu aplicativo. Por exemplo, confirme se um nó desconectado faz parte de um cache intencional antes de instruir o agente a anular as referências.

Casos de uso para análise de vazamento de memória

Instrua o agente a criar um perfil de memória durante ações repetitivas, incluindo timers e interações do usuário, em vez de tirar snapshots e fazer diffs manualmente. Integre a análise de memória ao seu processo de depuração com estes fluxos de trabalho.

Observação:as etapas de execução do agente são exemplos de comportamento potencial. O comportamento do seu agente pode ser diferente.

Detectar listeners de eventos não limpos durante a navegação

Os aplicativos de página única (SPAs) geralmente vazam memória quando os desenvolvedores se esquecem de remover listeners de eventos globais depois que um componente é desmontado. Você pode pedir ao seu agente para verificar se a memória é liberada corretamente ao navegar entre as visualizações.

Exemplo de comando:

Navigate from the home page to the dashboard and back to the home page. Use the take_heapsnapshot tool to check if we have any uncleared event listeners causing memory leaks.

Exemplo de execução do agente:o agente faz um instantâneo de alocação heap de linha de base na página inicial, navega até o painel e volta para a página inicial para fazer um instantâneo de alocação heap final. Em seguida, ele usa ferramentas de análise interna para avaliar snapshots, detecta que um listener scroll anexado ao objeto window nunca foi limpo e fornece o código específico para chamar removeEventListener na função de limpeza do componente.

Identificar nós DOM removidos em componentes da interface

Modais, menus suspensos e componentes de interface complexos costumam deixar nós DOM desconectados se as referências a eles forem mantidas em variáveis JavaScript depois de serem removidos do DOM.

Exemplo de comando:

Open the user settings modal and close it 5 times. Analyze the heap snapshots and tell me if there are any detached DOM nodes left behind. If there are, ask me if they are intentional before writing a fix.

Exemplo de execução do agente:seu agente interage com a caixa de diálogo de configurações enquanto coleta os snapshots de linha de base, destino e final necessários. A análise revela vários objetos em crescimento rotulados como "Detached HTMLDivElement". O agente informa a descoberta e pede sua confirmação antes de mudar o código para definir as variáveis que contêm as referências do DOM como null.

Encontrar caches sem limites em interações contínuas

Recursos como rolagem infinita ou busca contínua de dados podem vazar memória se os arrays ou mapas subjacentes crescerem indefinidamente sem um limite.

Exemplo de comando:

Scroll down the infinite feed list to load more items three times. Check if our LRU cache is unbounded and leaking memory, and suggest a fix.

Exemplo de execução do agente:seu agente analisa o estado da memória antes e depois da rolagem. Ele identifica um fechamento que captura sem querer uma matriz grande que cresce sem limites. O agente sugere implementar limites de armazenamento em cache ou usar um WeakMap para dados associados aos ciclos de vida do objeto, permitindo a coleta de lixo adequada.

Depurar vazamentos de memória em processos em segundo plano

Timers de animação e em segundo plano podem vazar memória sem interação explícita do usuário. Você pode instruir o agente a monitorar o crescimento da memória ao longo do tempo para encontrar vazamentos de memória nesses processos.

Exemplo de comando:

Explore this canvas application and monitor memory usage. Help me determine areas of improvement around reusing objects and textures.

Exemplo de execução do agente:seu agente explora o aplicativo de tela e tira snapshots periódicos automaticamente para monitorar o uso da memória ao longo do tempo. Ele analisa o heap e identifica que o loop de renderização envia novas malhas WebGL para uma matriz em todos os frames sem coletar lixo dos anteriores, sugerindo otimizações para reutilização de objetos.