」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 防止重新執行已使用相同參數處理過一次的大型 JavaScript 函數。

防止重新執行已使用相同參數處理過一次的大型 JavaScript 函數。

發佈於2024-08-29
瀏覽:163

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

記憶法

使用相同參數執行的函數的快取機制(memoizer)(僅 1.14 KB)

這個專案提供了一個 memoize 函數,透過快取昂貴的函數呼叫結果來提高 JavaScript 或 TypeScript 專案的效能。透過記憶,使用相同參數的重複呼叫將傳回快取的結果,從而加快執行速度。

這個模組的工作方式類似於react的useMemo鉤子,但不需要react。您可以使用任何框架或純javascript專案

Npm 包
GitHub

特徵

  • 函數記憶:緩存具有相同參數的函數呼叫結果。
  • 依賴項追蹤:如果依賴項發生更改,則更新快取。
  • 靈活性:可用於 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

績效結果

區分素數的複雜函數的效能結果。效能測試

案件 多發性硬化症
首次執行時間(無快取) > 52.08 毫秒
第二次執行時間(快取)
以及後續執行(快取)

測試覆蓋率結果

針對所有情況和所有參數類型編寫了測試。測試

文件 % 語句 % 分支 % 函數 % 行 未涵蓋的行#s
所有文件 100 100 100 100 0
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
版本聲明 本文轉載於: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