该项目提供了一个 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