我是靠谱客的博主 神勇日记本,这篇文章主要介绍学习设计模式——缓存模式(备忘录模式)学习设计模式——缓存模式(备忘录模式),现在分享给大家,希望可以做个参考。

学习设计模式——缓存模式(备忘录模式)

文章目录

  • 学习设计模式——缓存模式(备忘录模式)

场景:有一个新闻列表数据的翻页功能,目前的实现方式是点击上下页翻页请求服务器数据渲染,如果多次点击,出现重复请求数据问题。可以采用缓存模式优化设计

原始代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/** * 获取数据 * @param {*} page 页数 * @param {*} fn 回调函数 */ var getPageData = function (page, fn) { $.post('data/getNewsData.php', { page: page }, function (res) { // 正常数据 if (res.errNo == 0) { // 显示页面内容 showPage(page, res.dta) fn && fn() } else { // 处理异常 } }) } // 页面渲染逻辑 var showPage = function (page, data) { // 渲染页面内容 } // 下一页 $('#next_page').click(function () { // 新闻内容选择器对象 var $news = $('#news_contents') // 当前页数 var page = $news.data('page') // 获取数据方法 getPageData(page, function () { $news.data('page', page + 1) }) }) // 上一页 $('#prev_page').click(function () { // })

采用缓存模式优化

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 缓存构造函数 var Page = function () { // 数据缓存对象 var cache = {} return function (page, fn) { // 有缓存数据则从缓存中取 if (cache[page]) { showPage(page, cache[page]) fn && fn() } else { // 没有缓存数据从服务器获取 $.post('data/getNewsData.php', { page: page }, function (res) { // 正常数据 if (res.errNo == 0) { showPage(page, res.dta) // 获取的数据缓存起来 cache[page] = res.data fn && fn() } else { // 处理异常 } }) } } } // 使用,把Page替换原来的getPageData $('#next_page').click(function() { var $news = $('#news_contents') var page = $news.data('page') Page(page, function() { $news.data('page', page + 1) }) })

这样就完成了缓存数据的优化。不过当数据量过大时,会导致消耗大量资源,降低系统性能,复用率地的数据缓存下来是不值得的。因此资源空间的限制是缓存模式的一大障碍。

最后

以上就是神勇日记本最近收集整理的关于学习设计模式——缓存模式(备忘录模式)学习设计模式——缓存模式(备忘录模式)的全部内容,更多相关学习设计模式——缓存模式(备忘录模式)学习设计模式——缓存模式(备忘录模式)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部