PRNext 0.1.18: estado da página retido e um tempo de execução de produção mais forte

PRNext 0.1.18-alpha melhora o que acontece entre páginas, compilações e implantações. Você pode retornar a uma página com o estado do formulário intacto, priorizar uma navegação real e reutilizar mais trabalhos de compilação. No servidor, caches compartilhados e limites de recursos proporcionam mais controle sobre o trabalho admitido para cada solicitação.

Esta versão também adiciona um comando de criação de projeto, suporte para o compilador TypeScript 7 instalado em sua aplicação e uma integração opcional com o compilador React oficial. As seções abaixo explicam as mudanças por caso de uso, seguidas pelo changelog e verificações do aplicativo.

Comece com um projeto que você possa executar

O comando prnext create prepara um aplicativo App Router mínimo com seus arquivos, scripts de desenvolvimento e configuração. TypeScript é o padrão; --js cria um projeto JavaScript. O resultado fornece um ponto de partida consistente para desenvolvimento, compilações de produção e atendimento do aplicativo.

A criação aceita apenas um diretório ausente ou completamente vazio. Recusa-se a substituir um projeto existente. A opção --no-install grava arquivos sem instalar dependências ou acessar a rede, inclusive ao adicionar um projeto a um espaço de trabalho com seu próprio gerenciador de pacotes.

Terminal
npx @thomas.f/prnext create my-app
cd my-app
npm run dev

Esses comandos requerem PRNext 0.1.18-alpha ou posterior.

Retornar a uma página sem começar de novo

No App Router, PRNext retém ramificações inativas por meio da atividade React. Retornar a um destino autorizado sob o mesmo layout montado pode restaurar o estado do componente, como um filtro selecionado, um formulário parcialmente preenchido ou um painel aberto. Os efeitos param enquanto o ramo está oculto.

O orçamento padrão é de quatro filiais inativas por dois minutos, compartilhadas entre os layouts relevantes. Esta é uma entrada e um limite de tempo, não uma garantia RAM. A configuração navigationCache permite ajustar a retenção ou desativá-la.

O estado retido permanece sujeito à atualização e autorização dos dados. Ações do servidor, router.refresh() e alterações de identidade observadas invalidam ramificações inativas. A navegação para trás e para frente solicita um voo novo antes de revelar um destino retido. Após a autenticação personalizada, o aplicativo deverá acionar a atualização apropriada. Uma recarga completa do documento não preserva os rascunhos mantidos apenas na memória.

Envie alterações de voo com um substituto de resposta completa

As navegações do aplicativo podem negociar o voo diferencial de streaming. Quando o navegador tem uma base reutilizável, PRNext envia as diferenças necessárias para reconstruir a nova resposta exata. As bases retidas são limitadas e vinculadas ao contexto de implantação e de autenticação.

Uma base ausente, expirada ou incompatível produz uma resposta de voo completa. Um delta inválido permite uma nova tentativa sem delta para esse GET de navegação. As ações não são repetidas. O objetivo é evitar bytes repetidos quando o conteúdo suporta reutilização sem fazer com que a navegação dependa de um acerto no cache.

Buffers e bases retidas têm limites explícitos. HTML e manipulação de fluxo também evitam cópias binárias agregadas desnecessárias. Uma resposta do servidor ainda inclui renderização React, código do aplicativo e acesso a dados; o transporte diferencial não promete a mesma melhoria em todas as páginas.

Habilite o compilador React e inspecione suas decisões reais

A opção reactCompiler ativa o compilador React oficial incluído. Ele está desabilitado por padrão. A transformação tem como alvo os componentes do navegador do aplicativo e o gráfico de renderização de servidor isolado dos componentes do cliente do aplicativo, em desenvolvimento e produção. Os componentes do servidor, os módulos de ação do servidor, as dependências npm e o gráfico do servidor Pages permanecem fora desta transformação.

Você pode adotar o compilador gradualmente com compilaçãoMode: annotation e a diretiva use memo. A diretiva use no memo exclui uma função individual. O relatório do compilador prnext identifica funções observadas, decisões de otimização ou salto e os motivos do compilador. Ele também distingue a reutilização de transformação em cache. Estas são decisões de compilação, não medidas de velocidade da interface.

Os gráficos JavaScript elegíveis são armazenados como metadados binários e blobs endereçados por conteúdo. As somas de verificação são verificadas; entradas ausentes, corrompidas ou despejadas simultaneamente tornam-se falhas comuns de cache e são reconstruídas. As compilações de produção podem encurtar os nomes dos módulos CSS locais e das animações, compactar as exportações internas e reutilizar partes compartilhadas, preservando as interfaces públicas.

Use o TypeScript instalado em sua aplicação

PRNext suporta TypeScript 7 através de seu executável nativo oficial quando instalado na aplicação com suas dependências de plataforma. Verificações de produção, verificação de tipo prnext e diagnósticos de desenvolvimento usam esse compilador. PRNext não baixa um compilador durante uma compilação. TypeScript 5 e 6 mantêm sua integração com o compilador API.

As verificações não emitem o aplicativo JavaScript e mantêm o estado incremental do compilador em um diretório temporário de propriedade. Novos arquivos de origem e alterações de configuração reiniciam a geração de observação correspondente. A geração de rota digitada também suporta TypeScript nativo e preserva comentários JSONC ao atualizar a configuração. Cada projeto ainda precisa levar em conta as alterações de idioma e configuração do próprio TypeScript 7.

Compartilhe entradas de cache qualificadas entre processos

Um cache local não é suficiente quando um aplicativo é executado em vários trabalhadores ou instâncias. PRNext adiciona adaptadores Redis opcionais para resultados compartilhados qualificados. O manipulador de componentes de cache oferece suporte ao uso de resultados de cache. O adaptador createRedisIncrementalCache separado cobre HTML nativo e ISR, fetch e instável_cache.

Essas funções de armazenamento são explícitas: a ativação de um adaptador não substitui automaticamente todos os caches. Redis continua sendo uma dependência opcional do aplicativo. Um projeto normal e um projeto criado com o novo comando não exigem isso.

A regeneração compartilhada usa concessões para coordenar o trabalho e evitar que um produtor mais antigo publique após a invalidação ou expiração. O modelo preserva tags e valores binários. O objetivo é uma coordenação consistente entre processos, mantendo ao mesmo tempo a elegibilidade dos dados do aplicativo e as regras de isolamento.

Mantenha as guias abertas coerentes entre as implantações

Cada artefato de produção possui uma identidade de implantação. PRNext pode reter ativos imutáveis ​​de gerações anteriores dentro dos limites de idade, número de gerações e tamanho. Uma aba já aberta pode terminar de carregar recursos pertencentes ao seu código em vez de receber substituições arbitrárias da próxima implantação.

A retenção aplica-se a ativos elegíveis. Não justifica servir uma resposta personalizada antiga ou repetir uma ação. Proxies e caches na frente de PRNext devem preservar os cabeçalhos e variações exigidos pelo protocolo de implantação.

A opção htmlOnly também seleciona páginas de aplicativos totalmente estáticas e não interativas. Seu HTML de produção retém estilos, fontes e metadados sem scripts de bootstrap ou carga útil do Flight. Componentes de cliente, ações de servidor, links interativos e recursos de renderização incompatíveis são rejeitados para rotas selecionadas. Entrar em uma dessas páginas realiza a navegação normal do documento. Este é um modo explícito e não remove JavaScript de outras páginas.

Limite o trabalho admitido e deixe as solicitações terminarem

O tempo de execução fortalece a admissão de solicitações, as filas de espera e os orçamentos de resposta para que a carga não possa criar trabalho ilimitado. O agendamento leva em conta as rotas e deixa espaço para solicitações fora do fluxo mais movimentado. Os perfis de tempo de execução consideram melhor CPU e limites de memória visíveis no ambiente.

Os trabalhadores podem parar ou ser substituídos sem tratar o fim de um fluxo HTTP como o fim de todo o trabalho associado. Finalizadores de cache e tarefas pós-resposta rastreadas estão incluídas na drenagem. Os processos bloqueados mantêm um limite de encerramento e a recuperação do trabalhador não reproduz uma solicitação que já possa ter dados alterados.

Aposentar trabalhadores ociosos pode reduzir os recursos retidos entre os períodos de atividade, com um custo de ativação na próxima solicitação. O processo nativo e outros serviços permanecem presentes. Esse mecanismo de tempo de execução é separado de um aplicativo inteiro suspenso em um provedor de hospedagem. Os benefícios dependem do tráfego e do comportamento do aplicativo; esta versão não promete uma redução geral em RAM.

Inspecione o código realmente executado e carregado

Os ganchos de instrumentação suportam registro e relatórios de erros de solicitação nos ambientes Node, RSC e Edge suportados. A exportação OTLP HTTP JSON opcional correlaciona os estágios nativos HTTP, Node, RSC e busca com o contexto OpenTelemetry do aplicativo. As filas de exportação são limitadas e a falha na telemetria não altera a resposta do aplicativo.

A análise inicial do JavaScript inclui importações aguardadas durante a hidratação e blocos dinâmicos realmente usados ​​pela renderização do servidor. Os relatórios distinguem caminhos amostrados, tamanhos específicos de compactação e cobertura incompleta. Os estilos estão mais associados às rotas relevantes. Isso permite inspecionar o que uma página específica carrega sem tratar a soma de todos os ativos do projeto como sua carga inicial.

O registro de alterações do 0.1.18

A navegação reúne retenção de ramificação de aplicativo limitada, recuperação GET após perda de conexão, pré-busca de interação e transporte diferencial de voo. Os estágios de navegação e pré-busca permanecem opcionais: navigation(), prefetch() e garantirStatic definem fases elegíveis com componentes de cache sem tornar o conteúdo privado reutilizável por outro usuário.

A compilação adiciona o compilador React e seu relatório de decisão, TypeScript 7 nativo e armazenamento binário para gráficos elegíveis. As compilações encurtam os identificadores CSS locais e reutilizam partes compartilhadas. A compilação sob demanda pode materializar destinos após middleware e reescritas, reter as ramificações paralelas necessárias e deixar rotas não relacionadas inativas.

A produção adiciona adaptadores Redis, identidade de implantação, retenção de ativos limitada e rotas htmlOnly. A pré-renderização paralela e os finalizadores são coordenados com mais cuidado. Admissão, filas, buffers de resposta e ciclo de vida do trabalhador ganham controles mais fortes. O renderizador da Web continua sendo o padrão; o caminho opcional do nó oferece suporte a comparações no mesmo aplicativo.

As correções de confiabilidade incluem a descoberta de subdiretórios de origem após notificações de sistema de arquivos unidas, resolução de auxiliares de metadados e atualização de diagnósticos TypeScript nativos. Os testes de navegação aguardam uma página interativa, enquanto os testes de trabalho distinguem uma inicialização mais lenta válida de exceder os limites de desligamento. O novo gerador prepara scripts e arquivos para um aplicativo mínimo do App Router.

Validação e adoção em sua aplicação

Este artigo documenta o commit de origem 05a9ccd. A validação completa passa em Linux, macOS e Windows, cobrindo o tempo de execução de Rust, testes unitários, tipos, integrações e navegadores. Os arquivos para todas as seis plataformas são construídos a partir do mesmo commit. Doze instalações isoladas verificam ambos os layouts de dependência e dezoito cenários de ciclo de vida cobrem Node.js 22, 24 e 26.

A compatibilidade com Next.js permanece parcial e esta versão continua sendo alfa. Verifique suas rotas, acesso a dados, formulários e ações do servidor e, em seguida, crie e execute o aplicativo de produção. Adote o compilador React, Redis, navegação por etapas e html somente separadamente para que você possa observar seus efeitos em seu projeto.

Após atualizar o pacote, reconstrua e reinicie o aplicativo. Use os guias que acompanham a versão instalada para encontrar suas opções reais. Os resultados de desempenho vinculados a outro snapshot de origem não são uma nova referência deste commit. Meça CPU, RAM e o tempo de despertar em sua aplicação antes de generalizar um ganho.

Fontes e leituras adicionais

De volta ao blog