"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Empêche la réexécution de grandes fonctions javascript qui ont été traitées une fois avec le même paramètre.

Empêche la réexécution de grandes fonctions javascript qui ont été traitées une fois avec le même paramètre.

Publié le 2024-08-29
Parcourir:466

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

mémoriser

Mécanisme de cache (memoizer) pour les fonctions exécutées avec les mêmes paramètres (seulement 1,14 Ko)

Ce projet fournit une fonction de mémorisation pour améliorer les performances des projets JavaScript ou TypeScript en mettant en cache les résultats d'appels de fonctions coûteux. En mémorisant, les appels répétés avec les mêmes arguments renverront le résultat mis en cache, accélérant ainsi l'exécution.

Ce module fonctionne comme le hook useMemo de React, mais il n'est PAS nécessaire de réagir. Vous pouvez utiliser n'importe quel framework ou projet javascript pur

Forfait Npm
Github

Caractéristiques

  • Mémoisation de fonction : met en cache les résultats des appels de fonction avec les mêmes arguments.
  • Suivi des dépendances : met à jour le cache si les dépendances changent.
  • Flexibilité : utilisable dans les projets JavaScript et TypeScript.
  • La meilleure solution pour les opérations gourmandes en CPU ou les calculs complexes
  • Les fonctions déconnectées sont supprimées de la mémoire. Les caches appartenant à cette fonction sont également supprimés.
  • Magasin de cache basé sur WeakMap
  • WeakMap Déconnecte les méthodes qui ne peuvent pas communiquer avec des liens de référence faibles et déclenche l'intervention du garbage collector

Cas d'utilisation

Sans paramètres deps

Dans le processus suivant, lorsque la méthode concatPhoneNumber est à nouveau appelée avec les mêmes paramètres, la fonction n'est pas réexécutée, elle récupère le résultat du cache.

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

Avec paramètre deps

Si vous souhaitez que la méthode s'exécute à nouveau avec le même paramètre en fonction de certaines dépendances, vous pouvez passer le paramètre deps comme suit.

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

Résultat des performances

Résultats des performances sur une fonction complexe qui distingue les nombres premiers. Test de performances

Cas MS
Heure de première exécution (pas de mise en cache) > 52,08 ms
Deuxième temps d'exécution (mise en cache)
et exécution ultérieure (mise en cache)

Résultat de couverture du test

Des tests ont été écrits pour tous les cas et tous les types de paramètres. Tests

Déposer % des délais % Bifurquer % Fonctions % Lignes Numéros de lignes non couvertes
Tous les fichiers 100 100 100 100 0
lib 100 100 100 100 0
index.ts 100 100 100 100 0
lib/store 100 100 100 100 0
CacheStore.ts 100 100 100 100 0
DepsStore.ts 100 100 100 100 0
Déclaration de sortie Cet article est reproduit sur : https://dev.to/ahmetilhn/prevents-re-execution-of-large-javascript-functions-that-have-been-processed-once-with-the-same-parameter-1ici? 1 comme s'il y a une infraction, veuillez contacter [email protected] pour la supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3