Alto uso de memória Next.js: como diagnosticar
Distinga uma construção cara, crescimento de cache e vazamento de memória Next.js. Meça os processos, reproduza a carga de trabalho e verifique sua correção.
Um projeto pode ter centenas de rotas enquanto você trabalha em apenas uma. PRNext 0.1.17 usa essa diferença para gastar menos tempo em rotas não abertas e reutilizar trabalhos cujas entradas não foram alteradas.
A questão útil não é se um cache pode retornar um arquivo rapidamente. É se esse arquivo ainda representa o aplicativo atual. O pipeline de desenvolvimento mantém o rastreamento de dependências, a identidade de geração e os caminhos conservadores de retorno em torno de cada atalho.
A compilação da rota solicitada inclui a rota necessária ao navegador junto com seu layout compartilhado, erros e infraestrutura de dependência. As abas abertas mantêm suas rotas ativas; um conjunto inativo limitado evita reter todo o projeto indefinidamente.
Middleware, reescritas e rotas paralelas ou de interceptação podem tornar o gráfico de dependências menos previsível. Nesses casos, PRNext mantém a compilação completa em vez de adivinhar qual rota é segura para pular.
Por exemplo, alterar um cabeçalho compartilhado deve atualizar as páginas abertas que o importam, enquanto uma guia não relacionada mantém seu modelo atual. Um contador de navegador e um marcador de documento fornecem uma verificação mais forte do que uma solicitação retornando 200: eles mostram se a atualização preservou a interação já em andamento.
As transformações de desenvolvimento são armazenadas separadamente das entradas de construção de produção. A reutilização de uma transformação exige que a fonte e a política relevantes correspondam; uma otimização não pode depender apenas do nome do arquivo permanecer o mesmo.
Um cache persistente é uma infraestrutura opcional que economiza trabalho. Uma entrada indisponível ou inválida retorna à compilação. Não é um cache das respostas dinâmicas do seu aplicativo.
O desenvolvimento e a produção têm ciclos de vida diferentes, portanto o trabalho reutilizável é mantido separado. Uma reinicialização pode reutilizar uma transformação válida sem reutilizar um processo de aplicativo em execução ou uma resposta autenticada. As alterações na configuração ou na política de compilação ainda devem invalidar o trabalho que afetam.
Quando uma edição suportada altera apenas CSS, PRNext publica ativos de folha de estilo imutáveis sem reconstruir o gráfico JavaScript ou reiniciar o trabalhador do aplicativo. O navegador pode reter seu documento e estado React.
Uma alteração nas exportações do Módulo CSS pode afetar as importações de JavaScript. Processadores Sass e personalizados também podem ter dependências mais amplas. Esses casos recorrem ao compilador completo em vez de publicar uma atualização incompleta.
Gerações imutáveis também dão à edição uma identidade de ativo distinta. Uma guia que já usa a geração anterior pode terminar de carregar seus arquivos em vez de ver seu conteúdo mudar abaixo da solicitação. A otimização reduz o trabalho enquanto mantém explícita a relação entre uma construção e seus ativos.
O modo de desenvolvimento seguro investiga problemas de construção incremental compilando o gráfico de rota completo com novos compiladores. Ele desativa a reutilização de transformação persistente e não pré-aquece os trabalhadores, ao mesmo tempo que mantém o comportamento de atualização rápida compatível.
Use-o para comparar a mesma edição com um caminho de compilação mais simples. Um problema que desaparece no modo de segurança oferece uma reprodução focada para relatar; ele não identifica por si só a otimização defeituosa. Mantenha a alteração de origem, as rotas afetadas e os diagnósticos de construção com esse relatório.
Alto uso de memória Next.js: como diagnosticar