Maison > Article > interface Web > Empêche la réexécution de grandes fonctions javascript qui ont été traitées une fois avec le même paramètre.
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 projets javascript purs
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 selon 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 de performances sur une fonction complexe qui distingue les nombres premiers. Test de performances
Case | ms |
---|---|
First execute time (no caching) | > 52.08 ms |
Second execute time (caching) | < 0.03 ms |
and subsequent execution (caching) | < 0.03 ms |
Des tests ont été écrits pour tous les cas et tous les types de paramètres. Essais
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---|---|---|---|---|---|
All files | 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 |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!