「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 同じパラメータで一度処理された大きな JavaScript 関数の再実行を防ぎます。

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

2024 年 8 月 29 日に公開
ブラウズ:454

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

演奏結果

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

場合 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
リリースステートメント この記事は次の場所に転載されています: https://dev.to/ahmetilhn/prevents-re-execution-of-large-javascript-functions-that-have-been-processed-once-with-the-same-parameter-1ici? 1 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3