Menu
Coddy logo textTech

Duas Buscas ao Mesmo Tempo

Parte da seção Essenciais do Next.js do Journey de React da Coddy — lição 25 de 47.

Uma página geralmente precisa de mais de uma coisa. A maneira óbvia de escrever isso é também a maneira lenta:

const dishes = await getDishes();   // 60ms
const drinks = await getDrinks();   // 60ms, começando apenas agora
// total: 120ms

await significa stop here. O segundo carregamento nem começa até que o primeiro one tenha terminado, mesmo que nunca tenha precisado do resultado do primeiro one.

Inicie ambos e depois aguarde por ambos:

const [dishes, drinks] = await Promise.all([
    getDishes(),
    getDrinks(),
]);
// total: 60ms

O truque está no tempo de execução. Chamar getDishes() sem await inicia o trabalho e retorna uma promise imediatamente, para que, no momento em que o Promise.all começar a esperar, ambos os carregamentos já estejam em execução. Ele resolve para uma array de resultados, na ordem em que você os listou.

A regra geral:

  • Um carregamento precisa do resultado do outro → awaits sequenciais, não há outro jeito
  • Eles são independentPromise.all

Two loads é uma pequena vitória. Cinco é a diferença entre uma page que parece instantânea e one que não parece.

challenge icon

Desafio

Fácil

O app/page.jsx carrega pratos e bebidas um após o outro. Eles não têm nada a ver um com o outro, então execute-os juntos.

  1. Substitua os dois awaits sequenciais por um único await Promise.all([...]), desestruturado em dishes e drinks.

O lib/data.js está bloqueado e ele monitora se os dois carregamentos já se sobrepuseram em algum momento. O #report deve terminar exibindo Ran together em vez de Ran one at a time.

Experimente você mesmo

import './globals.css';

export const metadata = {
    title: 'My App',
};

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Essenciais do Next.js