Memoización en JavaScript

May 08 2023
La memorización es una poderosa técnica de optimización utilizada en la programación de computadoras para acelerar la ejecución de funciones mediante el almacenamiento en caché de sus resultados. Es particularmente útil cuando se trata de funciones computacionalmente costosas o llamadas con frecuencia.

La memorización es una poderosa técnica de optimización utilizada en la programación de computadoras para acelerar la ejecución de funciones mediante el almacenamiento en caché de sus resultados. Es particularmente útil cuando se trata de funciones computacionalmente costosas o llamadas con frecuencia. JavaScript, al ser un lenguaje dinámico y flexible, proporciona varias formas de implementar la memorización. En este artículo, profundizaremos en la memorización en JavaScript, explorando sus conceptos, beneficios y diferentes enfoques de implementación.

En esencia, la memorización implica almacenar los resultados de costosas llamadas a funciones y devolver el resultado almacenado en caché cuando se repiten las mismas entradas. Esto elimina los cálculos redundantes y mejora significativamente el rendimiento del programa. La idea básica detrás de la memorización se puede resumir en tres pasos:

  1. Compruebe si el resultado de un conjunto dado de entradas ya está en caché.
  2. Si se encuentra el resultado, devuélvalo.
  3. De lo contrario, calcule el resultado, guárdelo en caché y devuélvalo.

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

Una forma de implementar la memorización en JavaScript es mediante el uso de un objeto de caché para almacenar los resultados calculados. Aquí hay un ejemplo de cómo podemos modificar la fibonaccifunción para incorporar la memorización:

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;
}

Este enfoque mejora la complejidad temporal de la fibonaccifunción de exponencial a lineal, haciéndola mucho más eficiente. Como la función se llama de forma recursiva, los resultados intermedios se almacenan en caché, evitando cálculos redundantes.

Otro enfoque para la memorización en JavaScript implica el uso de funciones de orden superior. Podemos crear una función de orden superior llamada memoizeque toma una función como entrada y devuelve una versión memorizada de esa función. Aquí hay una implementación de ejemplo:

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 la memoizefunción, podemos envolver cualquier función que queramos memorizar. Aquí hay un ejemplo de cómo podemos aplicar memoizea la fibonaccifunción:

const fibonacciMemoized = memoize(fibonacci);

La memorización en JavaScript ofrece varios beneficios. En primer lugar, mejora el rendimiento de las funciones que implican cálculos costosos o llamadas recursivas al eliminar los cálculos redundantes. Esto puede conducir a aceleraciones significativas, especialmente para funciones con lógica compleja o entradas grandes.

En segundo lugar, la memorización mejora la legibilidad y el mantenimiento del código. Al separar la lógica de almacenamiento en caché de la función original, el código se vuelve más limpio y más fácil de entender. Además, si se llama a la misma función varias veces con las mismas entradas, la versión memorizada devuelve el resultado instantáneamente desde la memoria caché, lo que reduce la complejidad general y mejora la eficiencia del código.

Sin embargo, la memorización no es una bala de plata y puede no ser adecuada para todos los escenarios. Debe usarse con prudencia, teniendo en cuenta factores como el tamaño del espacio de entrada y el equilibrio entre el uso de la memoria y las ganancias de rendimiento. Las funciones con una pequeña cantidad de entradas posibles o aquellas que tienen efectos secundarios pueden no ser buenas candidatas para la memorización.

En conclusión, la memorización es una técnica valiosa para optimizar la ejecución de funciones en JavaScript. Mejora el rendimiento al almacenar en caché los resultados calculados y devolverlos para llamadas posteriores con las mismas entradas. JavaScript proporciona varios enfoques para implementar la memorización, incluido el uso de objetos de caché o funciones de orden superior. Al aplicar la memoización de manera adecuada, los desarrolladores pueden mejorar la eficiencia y la capacidad de respuesta de su código, particularmente cuando se trata de tareas computacionalmente intensivas.

¡Gracias por leer!

Espero que hayas encontrado útil este artículo. Si tiene alguna pregunta o sugerencia, por favor deje comentarios. Tus comentarios me ayudan a ser mejor.

No olvides suscribirte⭐️

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

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

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

Gorjeo :https://twitter.com/sumit_singh2311

Equipo utilizado :

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

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

Puedes preferir React Book: https://amzn.to/3Tw29nx

Algunos libros extra relacionados con el lenguaje de programación:

https://amzn.to/3z3tW5s

https://amzn.to/40n4m6O

https://amzn.to/3Jzstse

https://amzn.to/3nbl8aE

*Descargo de responsabilidad importante: "Amazon y el logotipo de Amazon son marcas comerciales de Amazon.com, Inc. o sus afiliados".