缓存函数的简单使用
2021/8/21 13:05:58
本文主要是介绍缓存函数的简单使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
缓存是一种重要的程序优化手段,一般采用以空间换时间的措施来提高程序性能,常用的缓存方法有浏览器缓存、HTTP 缓存等。
场景
假设有这样一个简单场景:后台返给前端一组数据做展示,考虑到页面性能问题,前端需要分页来显示。
我们就这个场景需求来做一下代码实现。
实现一
非常常规的实现方式:
// 假设后台返回的数据是一个数组,存在 data 中 function getPagerData(pageNumber, pageSize) { return data.slice(pageSize * (pageNumber - 1), pageSize * pageNumber); }
每次点击页面页码时,都要调用 getPagerData 方法来计算出所需要展示的数据。
如果 data 的长度不大,那每次计算应该都很快,一旦 data 的长度较大,那每次计算展示数据的速度就不是那么乐观了。
为了性能和展示的体验效果,后台都将数据一把推了,结果前端因为计算显示数据而导致展示慢,这就有点说不过去了,后台开发说不定还会嘲笑前端不给力呢。
实现二
既然做了分页功能,那就意味着用户可以点击任何一页的页码。如果采用“实现一”中的方案,那即使是之前已经显示过的数据,如果用户想要再次展示,还是要重新计算一遍才行,这要就做了很多重复性的工作,实在是影响性能你。
现在我们做一个这样的优化:
function dataController() { let catchData = new Map(); return function (pageNumber, pageSize) { if (!catchData.has(pageNumber)) { catchData.set(pageNumber, data.slice(pageSize * (pageNumber - 1), pageSize * pageNumber)); } return catchData.get(pageNumber); }; } let getPagerData = dataController();
之后用户每次点击页码时,我们只需要如下调用即可:
const data = getPagerData(pageNumber, pageSize);
然而,作为一名有追求有抱负的新时代程序员,我们会发现一个问题:上面的 dataController 只适用于这一种特定场景,没有可复用性!这哪行,必须改,于是有了下面这个方法:
function dataController(fn) { let catchData = new Map(); return function (...args) { if (!catchData.has(args[0])) { catchData.set(args[0], fn(...args)); } return catchData.get(args[0]); } } function getPagerData(pageNumber, pageSize) { return data.slice(pageSize * (pageNumber - 1), pageSize * pageNumber); } let getData = dataController(getPagerData);
之后每次需要数据的时候,都可以这样调用:
let data = getData(pageNumer, pageSize);
将具体截取数据的方法当做参数传入,之后如果有不同的截取逻辑,只需要封为函数传入 dataController 即可得到数据,大大提高了代码复用率。
总结
以上就是使用缓存函数的一个简单用例 !
~
~本文完,感谢阅读!
~
学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!
你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!
知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!
这篇关于缓存函数的简单使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)