這個專案提供了一個 memoize 函數,透過快取昂貴的函數呼叫結果來提高 JavaScript 或 TypeScript 專案的效能。透過記憶,使用相同參數的重複呼叫將傳回快取的結果,從而加快執行速度。
這個模組的工作方式類似於react的useMemo鉤子,但不需要react。您可以使用任何框架或純javascript專案
Npm 包
GitHub
在下面的過程中,當使用相同的參數再次呼叫 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
區分素數的複雜函數的效能結果。效能測試
案件 | 多發性硬化症 |
---|---|
首次執行時間(無快取) | > 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 |
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3