專案提供了 memoize 函數,透過快取昂貴的函數呼叫結果來提高 JavaScript 或 TypeScript 專案的效能。透過記憶,使用相同參數重複呼叫將傳回快取的結果,從而加快執行速度。
這個模組的工作原理類似於 React 的 useMemo hook,但不需要 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
區分素數的複雜函數的表現結果。性能測試
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中文網其他相關文章!