vue中如何控制一个全局接口的调用频率

news/2024/9/23 6:22:06/

业务说明

在app.vue,created中调用了一个同步用户信息的接口,但不希望每个页面刷新都会调用,并限制在页面的调用频率

具体实现

/*** 判断是否应该调用接口 白名单下的直接调用* @param {String} api_name 接口名字* @param {String} router_name 当前路由名字* @param {Array} routers_name 白名单路由名字* @param {Number} time 过期时间** **/
export function getNeedApi(api_name = '', router_name, routers_name = [], time = 5 * 60 * 1000) {if (routers_name.includes(router_name)) {return true}let isFlag = falselet now = Date.now()let needApi = sessionStorage.getItem(`needApi_${api_name}`)if (needApi) {needApi = JSON.parse(needApi)if (needApi.time && now - needApi.time > time) {isFlag = true}} else {isFlag = true}return isFlag
}/*** 新增api访问记录* @param {String} api_name 接口名字* **/
export function postNeedApi(api_name = '') {let now = Date.now()sessionStorage.setItem(`needApi_${api_name}`, JSON.stringify({ time: now }))
}

使用

  • getNeedApi先判断是否过期,调用后添加一次postNeedApi
  post_user_sync() {if (!this.getNeedApi('post_user_sync', this.routeName)) returnlet { email, password } = this.userdataif (!email || !password) returnlet params = {email,password,sync: 'sync',}if (!this.isDev() &&window.performance &&this.isObject(window.performance.timing)) {let { timing } = window.performancelet arr = [{label: '脚本加载时间',value: timing.domComplete - timing.domInteractive,},{label: '白屏时间',value: timing.domLoading - timing.fetchStart,},{label: '页面完全加载时间',value: timing.loadEventStart - timing.navigationStart,},]// 网络情况let netInfo = {}if (this.isObject(navigator.connection)) {let { downlink, effectiveType, rtt } = navigator.connectionnetInfo = {downlink,effectiveType,rtt,}}let data = {load_time: arr,netInfo,}params = {...params,...data,}}httpApi.post_user_sync(params).then((res) => {this.postNeedApi('post_user_sync')this.setUserData({user: res.data.data,})}).catch((e) => {console.log('同步用户信息失败', e)})},

http://www.ppmy.cn/news/1431119.html

相关文章

Python基于Django的旅游城市关键词分析和提取,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

苹果App Store政策调整,模拟器游戏或成为新机遇

随着智能手机的普及和技术的飞速发展,iPhone和Android手机已深入我们的日常生活,成为不可或缺的一部分。然而,两大系统在应用商店的运营模式上一直存在明显的差异。苹果的App Store以其封闭性和安全性而著称,而Android平台则以其开…

MongoDB 与MySQL的区别?优势?

MongoDB 与 MySQL 是两种不同类型的数据库管理系统,它们各自有独特的数据模型、查询语言、扩展方式以及适用场景。以下是它们的主要区别与各自的优势: 区别: 数据模型: MySQL:基于关系模型,使用表格&#…

【QT进阶】Qt http编程之json解析的简单介绍

往期回顾 【QT进阶】Qt http编程之后端API测试工具postman使用介绍-CSDN博客 【QT进阶】Qt http编程之http相关类的简单介绍-CSDN博客 【QT进阶】Qt http编程之用户登录注册功能实现-CSDN博客 【QT进阶】Qt http编程之json解析的简单介绍 一、JSON字符串 1、基本概念 JSON字…

【Node.js】json-server

概述 json-server 主要用于快速开启一个后端服务,并手动设置模拟接口数据。 以下来源于 json-server - npm (npmjs.com) 安装 npm install json-server用法 创建文件db.json {"posts": [{ "id": "1", "title": "a…

Altair® (澳汰尔)Grid Engine® 分布式资源管理系统

Grid Engine 是可靠的分布式资源管理系统,用于优化数千个数据中心的工作负载和资源,提高性能并提高生产力和效率。 Grid Engine 可通过优化应用程序、容器和服务的吞吐量和性能,同时极大化本地、混合和云基础设施之间的共享计算资源&#xf…

区块链安全应用-------压力测试

基于已有的链进行测试(build_chain默认建的链 四个节 点): 第一步:搭链 1. 安装依赖 在ubuntu操作系统中,操作步骤如下: sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

在誉天学习云计算HCIE,担心考试考不过?

誉天定制化课程内容覆盖了所有考试重点,可以系统地掌握理论与实践知识。 对于笔试,类似于备考驾照理论学习阶段,誉天为大家提供在线模拟测试系统,帮助大家掌握云计算笔试考点。笔试通过后,18个月内(一年半…