千家信息网

前端开发中怎么处理AJAX请求的重复使用

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关前端开发中怎么处理AJAX请求的重复使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在开发前端时,我们经常使用AJAX来初始化数据并动态渲染在页
千家信息网最后更新 2025年01月19日前端开发中怎么处理AJAX请求的重复使用

这篇文章给大家分享的是有关前端开发中怎么处理AJAX请求的重复使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在开发前端时,我们经常使用AJAX来初始化数据并动态渲染在页面上,但是在遇到一连串的相同数据都要进行请求时,就有可能对同一个API 发出并发请求,然而,因为这些请求是同时发出,因此响应也非常可能是相同的,这样讲可能不够清楚,直接写一个简易的范例来解释这个情况。

实际范例

首先我们先撰写一个API:

https://localhost:3000/api/v1/users/:uuid

这个API的回传值如下:

{     "name":"Username{uuid}",     "uuid":"{uuid}" }

随后开一个Vue的demo,并且先通过Axios写一个请求的函数:

// fetch-user.js  const axios = require('axios');  module.exports = (uuid) => {     let uri = `http://localhost:3000/users/${uuid}`;     return new Promise(resolve => {         axios.get(uri).then(resolve);     }) };

然后我们在Vue例子中新增一个User Component(User.vue)来负责渲染并请求接口:

  

最后将用户组件放入App.vue中:

  

接着我们看一下显示结果:

这样就正确显示了,然而这里有一个问题非常值得注意:

我们打开开发者模式就会发现,每个组件向该API发出了请求,因此就产生了10次的并发请求,但是在这种情况下,实际上我们仅需要让一个请求出去,另外9个元件等待这个请求的响应然后重新使用即可。

改进的方法

接下来将讲解要如何实现关于在同一个组件之间唯一指定API请求一次并分配请求,我们会用到这个元件EventTarget,这个元件有点类似Node.js中的EventEmitter,主要就是用于接收事件。

随后我们改写fetchUser()函数:

const axios = require('axios');  /**  * 这个 class 是用于存储 Response Data 的 Event 衍生类  */ class FetchCompleteEvent extends Event {     constructor(type, data) {         super(type);         this.data = data;     } }  // 用于请求成功时使用的事件监听器 const eventEmitter = new EventTarget();  // 用于请求失敗时使用的事件监听器 const errorEmitter = new EventTarget();  /**  * 用于存储 URI 以及是否当前正在请求的状态,如:  * http://localhost:8000/users/foo => true 代表已经发出请求,正在等待 Response  * http://localhost:8000/users/bar => false 代表当前没有请求在路上  */  const requestingList = new Map();  module.exports = (uuid) => {      let uri = `http://localhost:3000/users/${uuid}`;      return new Promise((resolve, reject) => {          // 如果没有记录,或者尚未处于请求状态         if (!requestingList.has(uri) || !requestingList.get(uri)) {              // 进入之后立即将请求状态设为 true             requestingList.set(uri, true);              // 请求 URI             axios.get(uri).then(response => {                  // 完成请求之后将请求状态设为 false                 requestingList.set(uri, false);                  // 发出一个事件通知來告诉 callback 请求完成了                 eventEmitter.dispatchEvent(new FetchCompleteEvent(uri, response));                 resolve(response);              }).catch((e) => {                  // 请求失败也算是请求完成,将请求状态设为 false                 requestingList.set(uri, false);                  // 发出一个事件通知來告诉 callback 请求失败了                 errorEmitter.dispatchEvent(new FetchCompleteEvent(uri, e));                 reject(e);              })         }          // 当目前指定的 URL 处于请求状态,则不做任何事情         else {              // 向成功的事件监听器注册,当完成之后 resolve()             eventEmitter.addEventListener(uri, (event) => {                 resolve(event.data);             });              // 失败之后 reject()             errorEmitter.addEventListener(uri, (event) => {                 reject(event.data);             })         }     }); };

接着我们重新运行前端应用程序并查看结果:

结果与一开始一模一样,而是当时我们打开开发者模式就会发现:

请求已经被减少到剩下一个了,这是因为所有的元件都重复使用了一个同一个响应。通过这种方法将可以大大减少服务器的负载以及前端的运行时间。

感谢各位的阅读!关于"前端开发中怎么处理AJAX请求的重复使用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

事件 状态 前端 开发 元件 监听器 组件 结果 监听 处理 相同 成功 代表 内容 函数 实际 开发者 情况 数据 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华三杯网络技术大赛成绩 aig网络安全险思维导图 对于网络安全的说法正确的有 网络安全相关经费保障 浙江服务器磁盘阵列卡安装云主机 网络安全 风险隐患的分析 北京拼多多互联网科技有限公司 C 服务器实例 上海智慧城管软件开发电话 网络安全知识竞赛全国三等奖 数据库有哪几种 网络安全法九大内容 租用服务器怎么做网站 湖北大数据软件开发哪家可靠 赤峰市互联网科技有限公司 网络安全基建工作 mysql 数据库列表 魔兽世界单机版数据库怎么查看 数据库及其应用视频 女生软件开发培训班 kms服务器激活有什么风险 方舟海贼服务器收人 国开大数据库应用技术小结练习 文件关系数据库管理系统 饥荒云服务器怎么取消封禁 河南三维人口管理系统软件开发 服务器系统直接安装 贵州拼接服务器厂家直销 计算机软件开发的程序员 卢哥数据库
0