"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Evita la reejecución de funciones javascript grandes que se han procesado una vez con el mismo parámetro.

Evita la reejecución de funciones javascript grandes que se han procesado una vez con el mismo parámetro.

Publicado el 2024-08-29
Navegar:216

Prevents re-execution of large javascript functions that have been processed once with the same parameter.

memorizar

Mecanismo de caché (memoizador) para funciones ejecutadas con los mismos parámetros (Sólo 1,14 KB)

Este proyecto proporciona una función de memorización para mejorar el rendimiento en proyectos de JavaScript o TypeScript al almacenar en caché los resultados de costosas llamadas a funciones. Al memorizar, las llamadas repetidas con los mismos argumentos devolverán el resultado almacenado en caché, lo que acelerará la ejecución.

Este módulo funciona como el gancho useMemo de reaccionar, pero NO requiere reacción. Puedes usar cualquier framework o proyectos de javascript puro

Paquete Npm
Github

Características

  • Memorización de funciones: almacena en caché los resultados de las llamadas a funciones con los mismos argumentos.
  • Seguimiento de dependencias: actualiza el caché si las dependencias cambian.
  • Flexibilidad: utilizable en proyectos JavaScript y TypeScript.
  • La mejor solución para operaciones con uso intensivo de CPU o cálculos complejos
  • Las funciones desconectadas se eliminan de la memoria. Los cachés pertenecientes a esta función también se eliminan.
  • Almacén de caché basado en WeakMap
  • WeakMap Desconecta métodos que no pueden comunicarse con enlaces de referencia débiles y activa el recolector de basura para activarse

Caso de uso

Sin parametros deps

En el siguiente proceso, cuando se llama nuevamente al método concatPhoneNumber con los mismos parámetros, la función no se ejecuta nuevamente, recupera el resultado del caché.

import memofy from "memofy";

const concatPhoneNumber = (extension, number) => {
  // Heavy calculation
  // return result
};

const memoizedConcatPhoneNumber = memofy(concatPhoneNumber, []);

memoizedConcatPhoneNumber(90, 555); // Runs concatPhoneNumber when first run
memoizedConcatPhoneNumber(90, 555); // get value from cache

memoizedConcatPhoneNumber(90, 552); // Runs concatPhoneNumber because params is change

Con parámetro deps

Si desea que el método se ejecute nuevamente con el mismo parámetro según algunas dependencias, puede pasar el parámetro deps de la siguiente manera.

import memofy from "memofy";

const taxRatio = 0.5;
const product = { title: "Test product", price: 10 };

const calculateTax = () => {
  // Calculate tax by product price
  // Heavy calculation
  return taxRatio * product.price;
};

const memoizedConcatPhoneNumber = memofy(calculateTax, [product, taxRatio]);

calculatedPrice = calculateTax(); // Runs concatPhoneNumber when first run

product.price = 40;
let calculatedPrice = calculateTax(); // Runs concatPhoneNumber because product dep changed

taxRatio = 0.8;
calculatedPrice = calculateTax(); // Runs concatPhoneNumber because taxRatio changed

Resultado de rendimiento

Resultados del rendimiento de una función compleja que distingue números primos. Prueba de rendimiento

Caso EM
Primera hora de ejecución (sin almacenamiento en caché) > 52,08 ms
Segundo tiempo de ejecución (almacenamiento en caché)
y ejecución posterior (almacenamiento en caché)

Resultado de cobertura de prueba

Se escribieron pruebas para todos los casos y todos los tipos de parámetros. Pruebas

Archivo % Stmts % Rama % Funciones % Líneas N.º de líneas descubiertas
Todos los archivos 100 100 100 100 0
lib 100 100 100 100 0
index.ts 100 100 100 100 0
lib/tienda 100 100 100 100 0
CacheStore.ts 100 100 100 100 0
DepsStore.ts 100 100 100 100 0
Declaración de liberación Este artículo se reproduce en: https://dev.to/ahmetilhn/prevents-re-execution-of-large-javascript-functions-that-have-been-processed-once-with-the-same-parameter-1ici? 1 como Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3