Aumente a performance da sua aplicação React em chamadas de API

Aprenda a otimizar o tempo de resposta de aplicações React que fazem diversas chamadas de API.

Estratégias para otimizar o tempo de resposta em aplicações React

Melhorar o tempo de resposta de uma aplicação React que realiza múltiplas chamadas de API é um desafio comum enfrentado por desenvolvedores. Neste tutorial, vamos explorar várias estratégias e boas práticas que podem ser aplicadas para otimizar a performance da sua aplicação.

1. Utilize a técnica de debouncing

Quando sua aplicação faz muitas chamadas de API em um curto espaço de tempo, você pode acabar sobrecarregando o servidor. Uma maneira de mitigar isso é utilizando o debouncing, que limita a quantidade de chamadas feitas em um intervalo de tempo específico. Veja um exemplo:

import { useState, useEffect } from 'react';

const useDebounce = (value, delay) => {
    const [debouncedValue, setDebouncedValue] = useState(value);
    useEffect(() => {
        const handler = setTimeout(() => {
            setDebouncedValue(value);
        }, delay);
        return () => {
            clearTimeout(handler);
        };
    }, [value, delay]);
    return debouncedValue;
};

Esse código define um hook customizado useDebounce, que pode ser usado para debouncing de qualquer valor, como um input de busca. O hook espera um tempo definido antes de atualizar o estado, evitando múltiplas chamadas desnecessárias.

2. Implementação de caching

Caching é uma técnica poderosa que pode acelerar o tempo de resposta. Ao armazenar em cache as respostas das chamadas de API, você evita que a mesma requisição seja feita várias vezes. Uma biblioteca popular para gerenciamento de cache em aplicações React é o react-query. Veja como configurá-la:

import { useQuery } from 'react-query';

const fetchTodoList = async () => {
    const response = await fetch('https://jsonplaceholder.typicode.com/todos');
    return response.json();
};

const TodoList = () => {
    const { data, error, isLoading } = useQuery('todos', fetchTodoList);

    if (isLoading) return <div>Loading...</div>;
    if (error) return <div>Error fetching data</div>;

    return <ul>{data.map(todo => <li key={todo.id}>{todo.title}</li>)}</ul>;
};

Neste exemplo, a função fetchTodoList busca uma lista de tarefas. O useQuery cuida do gerenciamento do estado de carregamento e erro, além de armazenar em cache os dados.

3. Use a API de Fetch com AbortController

A API de Fetch permite que você cancele requisições pendentes com o AbortController. Isso é útil quando um componente é desmontado antes que uma chamada de API seja completada. Veja como implementar:

const TodoComponent = () => {
    const controller = new AbortController();
    const signal = controller.signal;

    useEffect(() => {
        const fetchData = async () => {
            try {
                const response = await fetch('https://jsonplaceholder.typicode.com/todos', { signal });
                const data = await response.json();
                console.log(data);
            } catch (error) {
                if (error.name === 'AbortError') {
                    console.log('Fetch aborted');
                }
            }
        };
        fetchData();

        return () => {
            controller.abort();
        };
    }, []);

    return <div>Check the console for fetched data.</div>;
};

Neste código, o AbortController é utilizado para cancelar a requisição se o componente for desmontado, evitando chamadas desnecessárias e possíveis vazamentos de memória.

4. Reduzindo a quantidade de chamadas com Batching

Quando sua aplicação precisa fazer várias chamadas de API, considere usar técnicas de batching. Isso significa agrupar várias requisições em uma única chamada. Por exemplo, se você estiver buscando dados de usuários e seus posts, ao invés de fazer duas chamadas separadas, você pode configurar sua API para retornar ambos os dados em uma única requisição:

const fetchUserData = async (userId) => {
    const response = await fetch(`https://api.example.com/users/${userId}/posts`);
    return response.json();
};

5. Monitoramento e Análise de Performance

Por último, mas não menos importante, é fundamental monitorar a performance da sua aplicação. Utilize ferramentas como o Google Lighthouse ou o Web Vitals para analisar o tempo de resposta das suas APIs e identificar áreas que precisam de melhorias. Isso permitirá que você faça ajustes baseados em dados reais, garantindo que sua aplicação continue performando de forma eficiente.

Conclusão

A otimização do tempo de resposta em aplicações React que realizam múltiplas chamadas de API é um processo contínuo que envolve várias técnicas e boas práticas. Ao implementar debouncing, caching, e monitoramento, você pode melhorar significativamente a performance da sua aplicação. Teste as técnicas apresentadas e veja como elas podem impactar positivamente a experiência do usuário em sua aplicação.

Para garantir que sua aplicação React funcione de maneira eficaz, especialmente quando se trata de chamadas de API, é essencial entender como o tempo de resposta pode impactar a experiência do usuário. O desempenho de uma aplicação não depende apenas da qualidade do código, mas também da forma como as requisições são gerenciadas. Neste contexto, explorar técnicas como debouncing e caching, além de monitorar a performance, se torna imprescindível para criar uma aplicação responsiva e eficiente.

Algumas aplicações:

  • Aplicações de e-commerce
  • Plataformas de streaming
  • Redes sociais
  • Aplicativos de produtividade

Dicas para quem está começando

  • Foque na simplicidade do seu código
  • Teste as funcionalidades regularmente
  • Utilize ferramentas de monitoramento de performance

Contribuições de Amanda Oliveira

Compartilhe este tutorial: Como melhorar o tempo de resposta de uma aplicação React que faz muitas chamadas de API?

Compartilhe este tutorial

Continue aprendendo:

Como reduzir o número de re-renderizações de componentes React em produção?

Aprenda a otimizar re-renderizações em React para melhorar a performance da sua aplicação.

Tutorial anterior

Como usar Web Workers para executar operações pesadas sem travar a UI no React?

Aprenda a usar Web Workers em React para realizar tarefas pesadas sem travar a interface do usuário.

Próximo tutorial