SSR com transmissão a partir da borda
Transmita a saída HTML do React usando ReadableStream para que o navegador possa exibir imediatamente conteúdo significativo.
SSR com transmissão a partir da borda é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
A vantagem da transmissão em fluxo
Quando um servidor transmite HTML em fluxo, o navegador recebe e renderiza o conteúdo em blocos, em vez de esperar pelo documento completo. Isso significa que os usuários podem ver e utilizar as partes visíveis da página — o cabeçalho, a navegação e a seção principal — enquanto as seções mais lentas, dependentes de dados, ainda estão sendo carregadas.
renderToReadableStream com bootstrapScripts
Passar bootstrapScripts a renderToReadableStream informa ao React onde está o pacote JS do cliente. React insere uma tag de script no final do fluxo para que o navegador carregue o pacote e chame hydrateRoot, tornando a página interativa à medida que cada seção termina de ser transmitida.
Limites de Suspense na árvore
A transmissão em fluxo do React depende dos limites de Suspense para dividir a árvore de componentes em seções que podem ser transmitidas de forma independente. Os componentes dentro de um limite de Suspense que estão aguardando dados (por meio de uma Promise lançada) são transmitidos primeiro como espaços reservados; depois, são resolvidos e seu conteúdo real é transmitido.
onShellReady: quando iniciar a transmissão
A função de retorno onShellReady é executada quando o esqueleto HTML sem suspensão — tudo que está fora dos limites de Suspense — está pronto para ser transmitido. Esse é o momento correto para definir o código de status HTTP e os cabeçalhos da resposta e, em seguida, chamar pipe(res) ou começar a ler o ReadableStream.
Por que os códigos de status devem ser definidos primeiro
Os códigos de status e os cabeçalhos HTTP devem ser enviados antes do início do corpo da resposta. Como a transmissão começa com onShellReady, qualquer lógica de tratamento de erros (definir o status 500 ou redirecionar) precisa ser executada antes que o esqueleto comece a ser transmitido — depois que a transmissão começa, o código de status fica bloqueado.
Tratamento de erros: onShellError
onShellError é executado quando ocorre um erro fatal antes que o esqueleto esteja pronto — por exemplo, um erro em um componente de nível superior fora de qualquer limite de Suspense. Nesse caso, o esqueleto nunca é transmitido, e você deve responder com uma página de erro estática ou redirecionar para uma rota de erro.
Tratamento de erros: onError
onError é executado para erros recuperáveis dentro dos limites de Suspense. React ainda pode transmitir o restante da página; o limite que apresentou erro renderiza sua interface de usuário alternativa para erros. Use onError para registrar informações: capture o erro em sua plataforma de observabilidade sem interromper a transmissão.
Aprimoramento progressivo e limites de tempo
Se os dados de um limite do Suspense demorarem demais, transmita a estrutura inicial mesmo assim e permita que o limite seja hidratado no cliente. Implemente um tempo limite: após 5 segundos, chame abort() no fluxo se o limite ainda não tiver sido resolvido; então, o cliente buscará os dados por conta própria usando useEffect.
Mecânica da transmissão nos Cloudflare Workers
O ambiente de execução dos Workers passa o ReadableStream diretamente como corpo da Response. A infraestrutura da Cloudflare encaminha cada bloco para o navegador do usuário à medida que o React o produz, sem armazenar o documento inteiro em buffer. Isso significa que os primeiros bytes de HTML saem do PoP de borda poucos milissegundos depois que a solicitação chega.
Cancelamento: controle de fluxos longos
renderToReadableStream retorna uma função controladora de cancelamento. Se a solicitação for cancelada (porque o usuário navegar para outra página), chamar abort() impede que o React continue renderizando e processando dados. Isso evita computação desperdiçada em solicitações órfãs e mantém limitado o uso de CPU do Worker.
Perfil de latência de ponta a ponta
Com a transmissão na borda, a cadeia completa de latência é: 5 ms (da solicitação ao PoP mais próximo) + 2 ms (inicialização a frio do Worker) + 8 ms (renderização da estrutura inicial) = 15 ms até o primeiro byte. O navegador do usuário renderiza o elemento LCP a partir da estrutura inicial enquanto o restante da página continua sendo transmitido em segundo plano.
Momento de onShellReady
Em que momento exatamente a função de retorno onShellReady é acionada durante a SSR por transmissão contínua?
Recapitulação da lição
A SSR por transmissão contínua na borda entrega HTML em blocos, melhorando FCP e LCP ao enviar imediatamente a estrutura inicial. Os limites do Suspense dividem a árvore em seções que podem ser transmitidas de forma independente. onShellReady é o sinal para começar a encaminhar os dados — defina os códigos de status antes de chamá-lo. onShellError trata falhas fatais, onError trata falhas recuperáveis e abort() evita trabalho desperdiçado em solicitações canceladas.
Perguntas Frequentes
A aula “SSR com transmissão a partir da borda” é grátis?
Sim — o texto completo de “SSR com transmissão a partir da borda” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “SSR com transmissão a partir da borda”?
Transmita a saída HTML do React usando ReadableStream para que o navegador possa exibir imediatamente conteúdo significativo. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “SSR com transmissão a partir da borda”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O que é renderização na borda e por que é importante
- React no Cloudflare Workers com Hono
- SSR com transmissão a partir da borda
- Estratégias de cache na borda para aplicações React