ホームページ > ウェブフロントエンド > jsチュートリアル > 同じパラメータで一度処理された大きな JavaScript 関数の再実行を防ぎます。

同じパラメータで一度処理された大きな JavaScript 関数の再実行を防ぎます。

WBOY
リリース: 2024-08-28 06:08:06
オリジナル
545 人が閲覧しました

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

メモフィ

同じパラメータで実行される関数のキャッシュ機構(メモライザー) (わずか1.14 KB)

このプロジェクトは、負荷の高い関数呼び出しの結果をキャッシュすることで、JavaScript または TypeScript プロジェクトのパフォーマンスを向上させるためのメモ化関数を提供します。メモ化することで、同じ引数で繰り返し呼び出しを行うと、キャッシュされた結果が返され、実行が高速化されます。

このモジュールは、react の useMemo フックのように機能しますが、react は必要ありません。任意のフレームワークまたは純粋な JavaScript プロジェクトを使用できます

Npm パッケージ
ギットハブ

特徴

  • 関数のメモ化: 同じ引数を使用した関数呼び出しの結果をキャッシュします。
  • 依存関係の追跡: 依存関係が変更された場合にキャッシュを更新します。
  • 柔軟性: JavaScript プロジェクトと TypeScript プロジェクトの両方で使用可能。
  • CPU 負荷の高い操作や複雑な計算に最適なソリューション
  • 切断された機能はメモリから削除されます。この関数に属するキャッシュも削除されます。
  • WeakMap ベースのキャッシュ ストア
  • WeakMap 弱い参照リンクと通信できないメソッドを切断し、ガベージ コレクターの起動をトリガーします

使用例

depsパラメータなし

次のプロセスでは、同じパラメータで concatPhoneNumber メソッドが再度呼び出された場合、関数は再度実行されず、結果がキャッシュから取得されます。

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
ログイン後にコピー

depsパラメータあり

依存関係に従って同じパラメータを使用してメソッドを再度実行する場合は、次のように deps パラメータを渡すことができます。

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
ログイン後にコピー

演奏結果

素数を区別する複雑な関数のパフォーマンス結果。パフォーマンステスト

Case ms
First execute time (no caching) > 52.08 ms
Second execute time (caching) < 0.03 ms
and subsequent execution (caching) < 0.03 ms

テストカバレッジ結果

テストはすべてのケースとすべてのパラメーター タイプに対して作成されました。テスト

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

以上が同じパラメータで一度処理された大きな JavaScript 関数の再実行を防ぎます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート