„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Verhindert die erneute Ausführung großer Javascript-Funktionen, die einmal mit demselben Parameter verarbeitet wurden.

Verhindert die erneute Ausführung großer Javascript-Funktionen, die einmal mit demselben Parameter verarbeitet wurden.

Veröffentlicht am 29.08.2024
Durchsuche:138

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

memofy

Cache-Mechanismus (Memoizer) für Funktionen, die mit denselben Parametern ausgeführt werden (nur 1,14 KB)

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

Merkmale

  • Funktionsspeicherung: Zwischenspeichert Ergebnisse von Funktionsaufrufen mit denselben Argumenten.
  • Abhängigkeitsverfolgung: Aktualisiert den Cache, wenn sich Abhängigkeiten ändern.
  • Flexibilität: Verwendbar sowohl in JavaScript- als auch in TypeScript-Projekten.
  • Die beste Lösung für CPU-intensive Vorgänge oder komplexe Berechnungen
  • Die getrennten Funktionen werden aus dem Speicher gelöscht. Die zu dieser Funktion gehörenden Caches werden ebenfalls gelöscht.
  • WeakMap-basierter Cache-Speicher
  • WeakMap Trennt Methoden, die nicht mit schwachen Referenzlinks kommunizieren können, und löst den Garbage Collector aus

Anwendungsfall

Ohne Deps-Parameter

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

Mit deps-Parameter

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

Leistungsergebnis

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)

Testabdeckungsergebnis

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
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/ahmetilhn/prevents-re-execution-of-large-javascript-functions-that-have-been-processed-once-with-the-same-parameter-1ici? 1 as Wenn es einen Verstoß gibt, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

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