Dieses Projekt bietet eine Memoize-Funktion zur Verbesserung der Leistung in JavaScript- oder TypeScript-Projekten durch Zwischenspeichern der Ergebnisse teurer Funktionsaufrufe. Durch das Auswendiglernen geben wiederholte Aufrufe mit denselben Argumenten das zwischengespeicherte Ergebnis zurück und beschleunigen so die Ausführung.
Dieses Modul funktioniert wie der useMemo-Hook von React, ist aber NICHT erforderlich. Sie können jedes Framework oder reine Javascript-Projekte verwenden
Npm-Paket
Github
Wenn im folgenden Prozess die concatPhoneNumber-Methode erneut mit denselben Parametern aufgerufen wird, wird die Funktion nicht erneut ausgeführt, sondern ruft das Ergebnis aus dem Cache ab.
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
Wenn Sie möchten, dass die Methode gemäß einigen Abhängigkeiten erneut mit demselben Parameter ausgeführt wird, können Sie den Parameter deps wie folgt übergeben.
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
Leistungsergebnisse für eine komplexe Funktion, die Primzahlen unterscheidet. Leistungstest
Fall | MS |
---|---|
Erste Ausführungszeit (kein Caching) | > 52,08 ms |
Zweite Ausführungszeit (Caching) | |
und anschließende Ausführung (Caching) |
Tests wurden für alle Fälle und alle Parametertypen geschrieben. Tests
Datei | % Stmts | % Zweig | % Funcs | % Zeilen | Nicht abgedeckte Zeilennummern |
---|---|---|---|---|---|
Alle Dateien | 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 |
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3