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
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
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é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) |
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 |
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