このプロジェクトは、負荷の高い関数呼び出しの結果をキャッシュすることで、JavaScript または TypeScript プロジェクトのパフォーマンスを向上させるためのメモ化関数を提供します。メモ化することで、同じ引数で繰り返し呼び出しを行うと、キャッシュされた結果が返され、実行が高速化されます。
このモジュールは、react の useMemo フックのように機能しますが、react は必要ありません。任意のフレームワークまたは純粋な JavaScript プロジェクトを使用できます
Npm パッケージ
ギットハブ
次の処理では、同じパラメータで 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 パラメーターを渡すことができます。
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
素数を区別する複雑な関数のパフォーマンスの結果。パフォーマンステスト
場合 | MS |
---|---|
初回実行時間 (キャッシュなし) | > 52.08 ミリ秒 |
2 回目の実行時間 (キャッシュ) | |
その後の実行 (キャッシュ) |
テストはすべてのケースとすべてのパラメータ タイプに対して作成されました。テスト
ファイル | % ステータス | % 支店 | % 関数 | % 行 | 未カバーの行番号 |
---|---|---|---|---|---|
すべてのファイル | 100 | 100 | 100 | 100 | 0 |
ライブラリ | 100 | 100 | 100 | 100 | 0 |
インデックス.ts | 100 | 100 | 100 | 100 | 0 |
ライブラリ/ストア | 100 | 100 | 100 | 100 | 0 |
キャッシュストア.ts | 100 | 100 | 100 | 100 | 0 |
DepsStore.ts | 100 | 100 | 100 | 100 | 0 |
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3