Memorização em JavaScript

May 08 2023
A memorização é uma poderosa técnica de otimização usada na programação de computadores para acelerar a execução de funções armazenando em cache seus resultados. É particularmente útil ao lidar com funções computacionalmente caras ou frequentemente chamadas.

A memorização é uma poderosa técnica de otimização usada na programação de computadores para acelerar a execução de funções armazenando em cache seus resultados. É particularmente útil ao lidar com funções computacionalmente caras ou frequentemente chamadas. JavaScript, sendo uma linguagem dinâmica e flexível, fornece várias maneiras de implementar a memoização. Neste artigo, vamos nos aprofundar na memoização em JavaScript, explorando seus conceitos, benefícios e diferentes abordagens de implementação.

Em sua essência, a memoização envolve armazenar os resultados de chamadas de funções caras e retornar o resultado armazenado em cache quando as mesmas entradas ocorrerem novamente. Isso elimina cálculos redundantes e melhora significativamente o desempenho do programa. A ideia básica por trás da memoização pode ser resumida em três etapas:

  1. Verifique se o resultado de um determinado conjunto de entradas já está armazenado em cache.
  2. Se o resultado for encontrado, retorne-o.
  3. Caso contrário, calcule o resultado, armazene-o em cache e retorne-o.

function fibonacci(n) {
  if (n <= 1) {
    return n;
  }
  
  return fibonacci(n - 1) + fibonacci(n - 2);
}

Uma maneira de implementar a memoização em JavaScript é usar um objeto de cache para armazenar os resultados computados. Aqui está um exemplo de como podemos modificar a fibonaccifunção para incorporar a memorização:

function fibonacci(n, cache = {}) {
  if (n <= 1) {
    return n;
  }
  
  if (cache[n]) {
    return cache[n];
  }
  
  const result = fibonacci(n - 1, cache) + fibonacci(n - 2, cache);
  cache[n] = result;
  
  return result;
}

Essa abordagem melhora a complexidade de tempo da fibonaccifunção de exponencial para linear, tornando-a muito mais eficiente. Como a função é chamada recursivamente, os resultados intermediários são armazenados em cache, evitando cálculos redundantes.

Outra abordagem para memoização em JavaScript envolve o uso de funções de ordem superior. Podemos criar uma função de ordem superior chamada memoizeque recebe uma função como entrada e retorna uma versão memorizada dessa função. Aqui está um exemplo de implementação:

function memoize(func) {
  const cache = {};
  
  return function(...args) {
    const key = JSON.stringify(args);
    
    if (cache[key]) {
      return cache[key];
    }
    
    const result = func.apply(this, args);
    cache[key] = result;
    
    return result;
  };
}

Para usar a memoizefunção, podemos agrupar qualquer função que queremos memorizar. Aqui está um exemplo de como podemos aplicar memoizeà fibonaccifunção:

const fibonacciMemoized = memoize(fibonacci);

A memoização em JavaScript oferece vários benefícios. Em primeiro lugar, melhora o desempenho de funções que envolvem cálculos caros ou chamadas recursivas, eliminando cálculos redundantes. Isso pode levar a acelerações significativas, especialmente para funções com lógica complexa ou grandes entradas.

Em segundo lugar, a memoização melhora a legibilidade e a manutenção do código. Ao separar a lógica de cache da função original, o código fica mais limpo e fácil de entender. Além disso, se a mesma função for chamada várias vezes com as mesmas entradas, a versão memorizada retornará o resultado instantaneamente do cache, reduzindo a complexidade geral e aprimorando a eficiência do código.

No entanto, a memoização não é uma bala de prata e pode não ser adequada para todos os cenários. Deve ser usado criteriosamente, considerando fatores como o tamanho do espaço de entrada e a compensação entre uso de memória e ganhos de desempenho. Funções com um pequeno número de entradas possíveis ou aquelas que possuem efeitos colaterais podem não ser boas candidatas para memorização.

Concluindo, a memoização é uma técnica valiosa para otimizar a execução de funções em JavaScript. Ele melhora o desempenho armazenando em cache os resultados calculados e retornando-os para chamadas subsequentes com as mesmas entradas. O JavaScript fornece várias abordagens para implementar a memoização, incluindo o uso de objetos de cache ou funções de ordem superior. Aplicando a memoização apropriadamente, os desenvolvedores podem aumentar a eficiência e a capacidade de resposta de seu código, principalmente ao lidar com tarefas computacionais intensivas.

Obrigado por ler!

Espero que você tenha achado este artigo útil. Se você tiver alguma dúvida ou sugestão, por favor, deixe comentários. Seu feedback me ajuda a melhorar.

Não esqueça de se inscrever⭐️

Página do Facebook :https://www.facebook.com/designTechWorld1

Página do Instagram :https://www.instagram.com/techd.esign/

Canal do Youtube :https://www.youtube.com/@tech..Design/

Twitter :https://twitter.com/sumit_singh2311

Engrenagem usada :

Portátil :https://amzn.to/3yKkzaC

Assistir:https://amzn.to/41cialm

Você pode preferir o React Book: https://amzn.to/3Tw29nx

Alguns livros extras relacionados à linguagem de programação:

https://amzn.to/3z3tW5s

https://amzn.to/40n4m6O

https://amzn.to/3Jzstse

https://amzn.to/3nbl8aE

* Isenção de responsabilidade importante — “Amazon e o logotipo da Amazon são marcas registradas da Amazon.com, Inc. ou de suas afiliadas.”