当前位置:首页 > CN2资讯 > 正文内容

代理模式-缓存代理实现日期选择器缓存代理

2天前CN2资讯

缓存代理

保存输入和结果,建立映射关系,下次输入相同时可以直接从缓存读取结果,避免复杂耗时的判断和操作

日期选择器主要难点

  • 平闰年切换2月天数数组
  • 如果是首年/末年,更新月份数组,如果月份数组里找不到当前月,则重置月份
    • 如果当前月份为首年首月/末年末月,更新日期数组, 如果日期数组里找不到当前日期,则重置日期
  • 重置月份和日期的规则
    • 如果当前月 < 月份数组第一位, 则重置为月份数组第一位,例如startDate = 2019/3/10,当前选择结果为2020/2/11,重置后的结果为2019/3/11
    • 如果当前月 > 月份数组最后一位, 则重置为月份数组最后一位,例如当前结果为 2020/2/29,将年份切换到2019年,2月只有28天,所以重置后的结果为2019/2/28

优化方案

每次切换时间都生成一个mapKey,值为当前的年月日,然后进行计算和重置生成最终的年月日以及月日选项数组,然后把mapKey和最终的结果关联起来。这样下一次切换时如果年月日这个mapKey存在,则直接得到最终的结果。

const mapKey = `${this.tempDate.year}/${this.tempDate.month}/${this.tempDate.day}`;let tmpMap = this.map[mapKey];// 如果有缓存,则直接返回月、月数组、日、日数组if (tmpMap) {  this.date.day = tmpMap.dayArr;  this.tempDate.day = tmpMap.day;  this.date.month = tmpMap.monthArr;  this.tempDate.month = tmpMap.month;  console.log("useMap", tmpMap); } else {  // 初始化每月天数数组为平年   let arr: string[] = this.ordinaryMonth;  let tempDateM = parseInt(this.tempDate.month, 10);  const tempDateY = parseInt(this.tempDate.year, 10);  if (tempDateM === 2 && DateExt.prototype.isLeapYear(tempDateY)) {// 初每月天数数组改为平年arr = this.leapMonth;   }  // 根据当前月份从字典取出当前月份天数数组   let dayArr = this.dayDict[parseInt(arr[tempDateM - 1], 10)];  // 标记首年末年   let specialY: any = false;  // 根据当前年份更新月份数组   if (tempDateY === this.startDateExt.year) {this.date.month = this.startDateExt.monthArr;     specialY = this.startDateExt;   } else if (tempDateY === this.endDateExt.year) {this.date.month = this.endDateExt.monthArr;     specialY = this.endDateExt;   } else {this.date.month = this.monthDict;   }  // 对月年份为首年末年的情况,当前月份小于首月则重置成首月,大于末月则重置为末月, 处于首月末月的时候需要重置日期数组   if (specialY) {if (      this.tempDate.month >= this.date.month[this.date.month.length - 1]     ) {      this.tempDate.month = this.date.month[this.date.month.length - 1];      this.date.day = specialY.dayArr;     } else if (this.tempDate.month <= this.date.month[0]) {      this.tempDate.month = this.date.month[0];      this.date.day = specialY.dayArr;     }   } else {this.date.day = dayArr;   }  // 当前日期小于首日则重置为首日,大于末日则重置为末日   if (this.tempDate.day >= this.date.day[this.date.day.length - 1]) {this.tempDate.day = this.date.day[this.date.day.length - 1];   } else if (this.tempDate.day <= this.date.day[0]) {this.tempDate.day = this.date.day[0];   }  this.map[mapKey] = {month: this.tempDate.month,monthArr: this.date.month,day: this.tempDate.day,dayArr: this.date.day,   }; }this.resetOption("month");this.resetOption("day");复制代码
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24457.html

    分享给朋友:

    “代理模式-缓存代理实现日期选择器缓存代理” 的相关文章

    APT是什么?高级持续性威胁的定义与防御策略

    APT是指高级持续性威胁(Advanced Persistent Threat),它代表了一种针对特定目标进行的长期和有计划的网络攻击。这种攻击的高端特征在于,攻击者会在施加攻击之前,详细调查并了解攻击对象的业务流程和系统架构。换句话说,APT并不是一种简单随机的攻击,而是通过深入分析和细致的侦查工...

    探索美国ISP VPS:提升网络性能与安全性的最佳选择

    在当今互联网时代,虚拟专用服务器(VPS)变得越来越受欢迎,尤其是当我们提到美国ISP VPS时。这种由美国互联网服务提供商提供的VPS,不仅性能强大,还具有许多独特的优势。简而言之,美国ISP VPS就是在美国数据中心托管的一种虚拟服务器,它能满足各类业务需求,如解锁流媒体服务、支持跨境电商等。...

    选择最适合的泰国VPS解决方案,助力业务成功

    我一直对网络基础设施充满好奇,尤其是虚拟专用服务器(VPS)这一概念。VPS为用户提供了一种灵活且高效的网站托管解决方案,让我觉得非常迷人。而泰国VPS更是因其独特的地理位置和网络质量,成为了许多选择者的心仪之地。 什么是VPS呢?简单地说,VPS是一种通过虚拟化技术将物理服务器划分为多个独立的虚拟...

    水牛VPS:高性能虚拟专用服务器的最佳选择与比较

    水牛城VPS,顾名思义,是在美国纽约州布法罗市托管的虚拟专用服务器。这种服务器因其独特的地理位置和优越的技术配置,吸引了众多用户,特别是需要高性能和灵活性的网站和应用程序。这类服务的定义非常简单,但其特点却非常丰富。通常来说,水牛城VPS提供了良好的网络带宽、灵活的存储选项,以及能够根据用户需求进行...

    恒创科技:引领数据中心与网络安全解决方案的先锋

    恒创科技这个名字,对于熟悉科技行业的人来说,或许并不陌生。它是一个多元化的品牌,涉及数据中心、网络安全、软件开发和智慧城市解决方案等多个领域。我对这家公司一直抱有浓厚的兴趣,因为它所提供的服务非常全面,能够满足不同行业的需求。 在我看来,恒创科技一直努力将最先进的技术应用于实际场景中,尤其是在互联网...

    elkupi - 提供灵活抗投诉主机服务的领先选择

    在我探寻各种主机服务商时,elkupi是个让我印象深刻的名字。这家公司在业内存在已久,专注于提供一些特殊主机服务,尤其是在欧美国家法律限制较多的情况下,elkupi的优势尤为明显。它不仅能容纳一些法律上不太允许的内容,在抗投诉方面也表现得非常出色,几乎可以忽略不计。这一特点无疑吸引了很多需要这类服务...