"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Aumentando o desempenho de aplicativos da Web com API de tarefas em segundo plano (RequestIdleCallback)

Aumentando o desempenho de aplicativos da Web com API de tarefas em segundo plano (RequestIdleCallback)

Publicado em 01/08/2024
Navegar:360

Quando se trata de desempenho de aplicativos web, cada milissegundo é importante. Para garantir uma experiência de usuário tranquila e responsiva, os desenvolvedores precisam otimizar a execução do código e utilizar com eficiência os recursos disponíveis. Nesta postagem do blog, nos aprofundaremos na API requestIdleCallback() e em seu potencial para aumentar o desempenho da web. Exploraremos um exemplo prático de uso da API requestIdleCallback() em um gerador de código serial, mostrando como essa API poderosa pode otimizar a execução de código e aprimorar a experiência do usuário.

Boosting Web Application Performance with Background Task API (RequestIdleCallback)

O que é requestIdleCallback?

requestIdleCallback é uma API JavaScript que permite aos desenvolvedores agendar tarefas para serem executadas quando o loop de eventos do navegador estiver ocioso. O loop de eventos é responsável por processar as interações do usuário, renderizar atualizações e executar código JavaScript. Ao aproveitar requestIdleCallback, os desenvolvedores podem garantir que tarefas não essenciais ou demoradas sejam executadas durante períodos de inatividade, reduzindo o impacto em operações críticas e melhorando o desempenho geral do aplicativo.

Vamos dar uma olhada mais de perto em como o Serial Code Generator utiliza a API requestIdleCallback() no contexto de um Serial Code Generator

Visão geral do gerador de código serial:

O Serial Code Generator é um aplicativo da web que gera um número específico de códigos seriais. Ele emprega a API requestIdleCallback() para executar a execução de código durante períodos ociosos do navegador, garantindo uma experiência de usuário tranquila. Vamos explorar os principais componentes e funcionalidades do código fornecido.

Experimente o exemplo ao vivo aqui para ver o Gerador de código serial em ação!

Você pode ver o código no GitHub aqui.

Gerando códigos seriais com requestIdleCallback():

A lógica JavaScript no Serial Code Generator utiliza a API requestIdleCallback() para gerar códigos seriais de forma eficiente. Veja como funciona:

// Function to generate a chunk of serial codes
function generateCodeChunk(deadline) {
    while ((deadline.timeRemaining() > 0 || deadline.didTimeout) && codeChunkLength = lengthText.value) {
            logElem.innerText = null;
            taskHandler = requestIdleCallback(generateBackgroundTasks, { timeout: 1000 });
            break;
        }
    }

    // Continue generating code chunks if more codes are needed
    if (codeChunkLength 



Na função generateCodeChunk(), utilizamos a API requestIdleCallback() para gerar um pedaço de códigos seriais de forma eficiente. Ele itera até que o tempo ocioso do navegador expire ou o número desejado de códigos seja gerado. Essa abordagem evita o bloqueio do thread principal e permite uma experiência de usuário responsiva.

A função generateSerialCode() é responsável por iniciar o processo de geração do código serial. Ele valida a entrada do usuário, desativa os campos de entrada e o botão Iniciar e inicia a geração de código agendando um requestIdleCallback() usando generateCodeChunk().

Ao empregar a API requestIdleCallback(), o Serial Code Generator garante que as tarefas de geração de código sejam executadas durante períodos ociosos, melhorando o desempenho geral do aplicativo da web e a experiência do usuário.

Benefícios de usar requestIdleCallback

  1. Capacidade de resposta aprimorada: Ao adiar tarefas não críticas para períodos ociosos, os aplicativos da Web podem manter uma interface de usuário responsiva. Isto é particularmente importante ao lidar com tarefas que requerem um tempo de processamento significativo, como cálculos complexos, manipulação de dados ou atualizações de renderização. Ao executar essas tarefas durante períodos ociosos, o thread principal permanece disponível para lidar com as interações do usuário, resultando em uma experiência mais suave e interativa.
  2. Utilização ideal de recursos: A API requestIdleCallback ajuda a otimizar a utilização de recursos, garantindo que as tarefas sejam executadas quando os recursos do sistema estiverem disponíveis. Ao evitar a contenção de recursos, os aplicativos da Web podem utilizar com eficiência a CPU, a memória e outros recursos do sistema, levando a um melhor desempenho geral.
  3. Jank e Stutter reduzidos: Jank refere-se à gagueira ou tremor visível experimentado pelos usuários ao interagir com um aplicativo da web. Ao usar requestIdleCallback para agendar tarefas, os desenvolvedores podem minimizar a instabilidade distribuindo a carga de trabalho uniformemente entre os períodos ociosos. Isso resulta em uma taxa de quadros mais consistente e uma experiência visual mais suave.
  4. Carregamento e renderização progressivos: requestIdleCallback é particularmente útil para técnicas de carregamento e renderização progressivos. Em vez de carregar e renderizar todo o conteúdo de uma vez, os desenvolvedores podem aproveitar os períodos ociosos para carregar e renderizar o conteúdo de forma incremental, melhorando o desempenho percebido e permitindo que os usuários comecem a interagir com o aplicativo mais cedo.

A implementação de requestIdleCallback envolve as seguintes etapas:

  • Agendamento de tarefas: identifique tarefas que podem ser adiadas e executadas durante períodos ociosos. Essas tarefas não devem ser críticas e não devem impactar a experiência imediata do usuário.
  • Registrando o Callback: Use a função requestIdleCallback() para registrar uma função de callback que será invocada quando o loop de eventos do navegador estiver ocioso. Esta função recebe uma função de retorno de chamada como argumento, que será executada quando o tempo ocioso estiver disponível.
function performIdleTasks(deadline) {
  // Task execution logic

  // Check if there are more tasks remaining
  if (moreTasks()) {
    // Reschedule the callback to continue executing tasks in the next idle period
    requestIdleCallback(performIdleTasks);
  }
}

// Initiate the first requestIdleCallback
requestIdleCallback(performIdleTasks);
  • Execução de Tarefas: Dentro da função de retorno de chamada, execute as tarefas desejadas que foram identificadas para execução ociosa. Essas tarefas podem incluir processamento de dados, otimização de desempenho, carregamento lento de recursos ou qualquer outra operação que possa ser adiada sem afetar as interações imediatas do usuário.
function performIdleTasks(deadline) {
  while (deadline.timeRemaining() > 0) {
    // Perform idle tasks here
    // These tasks should be non-critical and time-consuming
  }

  // Check if there are more tasks remaining
  if (moreTasks()) {
    // Reschedule the callback to continue executing tasks in the next idle period
    requestIdleCallback(performIdleTasks);
  }
}

// Initiate the first requestIdleCallback
requestIdleCallback(performIdleTasks);
  • Priorização de tarefas: priorize tarefas dentro da função de retorno de chamada com base em sua importância e impacto na experiência do usuário. Certifique-se de que as tarefas críticas sejam executadas primeiro, enquanto as tarefas menos críticas ou demoradas podem ser executadas posteriormente, durante os períodos ociosos subsequentes.
function performIdleTasks(deadline) {
  while (deadline.timeRemaining() > 0) {
    // Check if there are critical tasks that need to be executed immediately
    if (hasCriticalTasks()) {
      // Execute critical tasks
      executeCriticalTasks();
      return; // Exit the callback to prioritize critical tasks
    }

    // Perform less critical or time-consuming tasks here
  }

  // Check if there are more tasks remaining
  if (moreTasks()) {
    // Reschedule the callback to continue executing tasks in the next idle period
    requestIdleCallback(performIdleTasks);
  }
}

// Initiate the first requestIdleCallback
requestIdleCallback(performIdleTasks);

Seguindo essas etapas e incorporando requestIdleCallback em seu código, você pode agendar com eficiência tarefas não críticas para serem executadas durante períodos ociosos, otimizando o desempenho e garantindo uma experiência de usuário tranquila.

A otimização do desempenho da Web é um aspecto crucial para fornecer experiências excepcionais ao usuário. A API requestIdleCallback() oferece uma ferramenta poderosa para agendar tarefas não críticas durante períodos ociosos, garantindo bom desempenho e capacidade de resposta. O exemplo do Serial Code Generator mostrou como essa API pode ser utilizada de maneira eficaz, permitindo a execução de código em segundo plano sem interromper tarefas críticas.

Ao incorporar a API requestIdleCallback() em seu fluxo de trabalho de desenvolvimento web, você pode otimizar o uso de recursos, priorizar tarefas essenciais e melhorar o desempenho geral. Seja gerando códigos, realizando cálculos complexos ou atualizando grandes conjuntos de dados, aproveitar períodos ociosos com requestIdleCallback() pode levar a ganhos significativos de desempenho.

Ao embarcar em sua jornada de desenvolvimento web, considere integrar a API requestIdleCallback() para desbloquear todo o potencial de seus aplicativos. Ao otimizar a execução do código e aproveitar os períodos de inatividade de forma eficiente, você pode fornecer aos usuários experiências excepcionais e diferenciar seus aplicativos da web da concorrência.

Continue explorando e experimentando a API requestIdleCallback() para tornar seus aplicativos da web mais rápidos, mais suaves e mais agradáveis ​​para seus usuários.

Boa otimização!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/goldenthrust/boosting-web-application-performance-with-background-task-api-requestidlecallback-1ig8?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3