当前位置: 首页 > news >正文

做电影网站失败了一站式媒体发稿平台

做电影网站失败了,一站式媒体发稿平台,网上停车场做施工图人员网站,西安做百度网站公司前言 在一些项目里#xff0c;我们可能有着大量的下拉框#xff0c;而这些下拉框的数据就来源于我们后端接口返回的字典信息。于是#xff0c;画风可能是这样的#xff0c;每次下拉#xff0c;你都需要请求一次字典接口拿到这些数据#xff0c;于是每次组件刷新都会重复…前言 在一些项目里我们可能有着大量的下拉框而这些下拉框的数据就来源于我们后端接口返回的字典信息。于是画风可能是这样的每次下拉你都需要请求一次字典接口拿到这些数据于是每次组件刷新都会重复请求接口造成性能上的浪费如下图所示 那么我们可不可以把这些字典值缓存起来只在第一次加载时请求一次呢? 使用vuex缓存字典数据 在Vue项目中我们要实现数据的缓存自然要考虑到Vuex、Pinia状态管理了。 思路是这样的每个字典肯定有一个key也就是其名字每次拿字典值先从状态管理中寻找字典的key如果找不到或者数据为空我们就请求接口响应后先把数据处理后存放在状态管理后再返回当第二次请求时自然地就从状态管理中取值而不是再次请求接口了。 新建测试项目后台使用koa返回简单的字典值 前端为Vue3Vuex使用Element-Plus组件库中的Select下拉组件此下拉组件需要的数据格式如下 [{label:,value:}]Vuex中相关代码为 const store createStore({state:{dicData:{}},mutations:{getDic(state:any,key:string){return state.dicData[key]},setDic(state:any,data:{key:string;list:any[]}){const {key,list} data;state.dicData[key]list}},actions:{async GET_DIC(context:any,payload:any){const {key} payloadif(context.state.dicData[key]){return context.state.dicData[key]} else{const data (await getDicData(key)).dataconst list data.map(item({value: item.key || item.code,label: item.value || item.name}))context.commit(setDic,{key:key,list:list});return list}}} })在actions的GET_DIC方法中我们根据传入的key先从state中的dicData取出字典值取不到后才请求接口getDicData拿到值做数据处理后先通过mutation的setDic方法设置字典数据再返回。 调用如下 store.dispatch(GET_DIC,{key:fruit}).then(res{options.valueres;})这样无论组件怎么刷新接口始终只调用一次节省了等待时间和带宽。 如果后端接口没有这么规范每一个字典都单独做了一个接口也可以利用swtich根据不同的key单独写处理数据的逻辑最终在dicData的值均是形如以下的数据格式就好了。 dicData:{fruit:[{label:苹果,value:101}],class:[{label:一年级一班,value:201}] }Pinia的实现 export const useSelectStore defineStore(select,{state:(){return{dicData:{}}},actions:{setDic(key:string,list:any[]){this.dicData[key]list;},async getDic(key:string){console.log(this.dicData)if(this.dicData[key]){return this.dicData[key]} else{const data (await getDicData(key)).data;const list data.map(item({value: item.key || item.code,label: item.value || item.name}));this.setDic(key,list);return list;}}} })调用 const selectStore useSelectStore(); selectStore.getDic(props.requestKey).then(res{options.valueres;})Pinia代码上差不了太多不过其本身的确比Vuex简洁一些。 同时渲染造成的请求并发问题 评论区有小伙伴说到了万一同时渲染会发起多个一样的请求也就是请求并发的问题。如图所示页面有四个班级列表的下拉。渲染该页面则每个下拉都会发起一个请求即 可以看到班级的字典数据请求共有4次违背了我们设计的初衷。那么我们如何解决呢?就要对接口本身做缓存了而这个缓存方案也很简单我们这块只需要对字典数据的接口单独缓存使用Promise就够了。 先上代码(以Pinia为例) const cacheMap{}; ​ export const useSelectStore defineStore(select,{state:(){return{dicData:{}}},actions:{setDic(key:string,list:any[]){this.dicData[key]list;},getDic(key:string){// console.log(this.dicData)if(this.dicData[key]){return new Promise((resolve,reject){resolve(this.dicData[key])})} else{// return new Promise((resolve,reject){//     getDicData(key).then(res{//         const data res.data;//         const list data.map(item({//             value: item.key || item.code,//             label: item.value || item.name//         }));//         this.setDic(key,list);//         resolve(list);//     })// })//添加接口并发缓存处理if((cacheMap?.[key]?.length ?? 0)0){cacheMap[key][];getDicData(key).then(res{const data res.data;while(cacheMap[key].length){const list data.map(item({value: item.key || item.code,label: item.value || item.name}));this.setDic(key,list);const resolve cacheMap[key].shift();resolve[0](list)}})}return new Promise((resolve,reject){cacheMap[key].push([resolve,reject]);})}}} }) ​cacheMap为全局的缓存对象其每个属性key为字典的key每次请求返回一个promise并将resolve和reject回调存储下来。对于cacheMap[key]其数组为空时可知是首次请求此时调用接口获取数据。由于接口请求也是异步实例化Promise的语句是同步的当请求响应前所有的resolve与reject回调已经缓存。我们调用所有的resolve完成所有的promise并清空数组就实现了简单的接口缓存。
http://www.huolong8.cn/news/174399/

相关文章:

  • 江苏省建设工程八大员考试网站张家港网站建设优化
  • 网站建设哪家服务态度好网站关键词查询
  • 展示型网站解决方案wordpress自动加文章tittle
  • 网站建设方案范文1000字seo搜索优化是什么呢
  • 一流的五屏网站建设有网站如何做直播
  • 建设通网站上的业绩能否删除掉wordpress get option
  • 网站开发的就业方向旅游网页模板素材
  • 企业型网站制作只有做推广才能搜索到网站吗
  • 湖州佳成建设网站抖音关键词搜索指数
  • 网站网页打开的速度什么决定的福州网站开发一般多少钱
  • 什么是响应式开发网站推广优化方式
  • 怎么建立微信大转盘的网站服务免费服务器建立网站
  • 诸城高密网站建设ps做图游戏下载网站有哪些内容
  • 电子商务网站的全面建设宿迁华夏建设集团网站
  • 东莞天助网的网站建筑网官网大全
  • 网站app开发公司wordpress改为QQ头像
  • 东北亚科技园里有做网站的吗百度网站地图在线生成
  • 做dhl底单的网站是 什么seo性能优化
  • 怎样做p2p网站一般网站 要 加入 友情链接吗
  • 网站开发技能介绍微网站建设多少钱
  • 免费网站建设力荐 186一6159一6345绘政正规专业的家居行业网站制作
  • 优动网站400电话申请
  • 做全网影视网站的风险移动商城积分和积分区别
  • 上海做网站内容检查的公司寿光市住房和城乡建设局网站
  • 受欢迎的免费建站建设部安全事故通报网站
  • 域名转发网站网站后台地址忘记了
  • 建设银行官方网站app下载做汽车微信广告视频网站有哪些
  • 国外家装设计网站怎么查网站的备案
  • 网站文章更新频率刘连康seo培训哪家强
  • php网站建设一流程网站客户需求分析