问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

页面上有100个请求发送,突然切换页面,前端该怎么优化?

创作时间:
作者:
@小白创作中心

页面上有100个请求发送,突然切换页面,前端该怎么优化?

引用
CSDN
1.
https://blog.csdn.net/mayuhao0000/article/details/143686489

在前端开发中,当一个页面需要发送大量请求时,如何优化性能是一个值得深入探讨的问题。本文从实际场景出发,详细分析了如何通过优化请求和交互来提升用户体验,为前端开发者提供了实用的解决方案。

背景

最近,一位小伙伴在面试时被问到了这样一个问题:当页面上有100个请求发送时,突然切换页面,前端该如何优化?乍一看,这似乎是一个伪命题,因为正常情况下很少会有如此多的请求。但在某些特殊场景下,这种情况确实可能发生,而且随着Web端需求的日益复杂,这种需求也变得越来越常见。

实际会出现吗

在正常的设计中,产品经理通常会注重功能解耦,后端也不会轻易提供过多的接口。但在某些特殊场景下,例如低代码平台的自定义首页,确实可能出现大量请求的情况。以某公司产品的首页为例,配置了16个组件,再加上一些其他接口,如国际化、业务配置等,总共需要58个接口。即使在良好的网络环境下,完成所有请求也需要3.47秒,在这段时间内切换页面是完全可能的。

该怎么优化

要优化这个问题,首先需要明确优化的目标。是为了解决服务器压力问题,还是提升用户体验,或者是处理突然切换页面时未完成的请求。根据这些目标,可以从两个方向进行优化:优化请求和优化交互。

优化请求

  1. 使用Promise.all()、Promise.race()或Promise.allSettled()来控制异步任务
  2. 实现组件和图片的懒加载,优先处理视口内的元素
  3. 引入缓存机制,减少不必要的请求
  4. 升级到HTTP2.0/3.0,利用底层优化提高请求效率
  5. 使用WebSocket,在需要实时性的场景中减少HTTP请求
  6. 使用WebWorker创建多线程环境,减轻主线程负担
  7. 合并请求,从源头上减少接口数量

优化交互

如何知道接口有没有完成

可以定义一个请求队列,使用Vuex或Pinia等状态管理工具来管理请求状态。每个请求使用唯一标识(如UUID)进行区分,并在请求开始和结束时进行入队和出队操作。

// 定义一个请求队列
const axiosQueue = [];

// 将axios实例加入请求队列
const enQueue = (id, axiosInstance) => {
    axiosQueue.push({
        id,
        axiosInstance
    });
};

// 出队
const deQueue = () => {
    axiosQueue.shift();
};

// 批量出队
const deQueueMuti = (ids) => {
    const idsArr = ids.split(',');
    axiosQueue.filter(item => idsArr.includes(item.id));
};

// 执行请求队列
const runQueue = () => {
    axiosQueue.forEach(item => {
        doAxios(item.axiosInstance);
    });
};

未完成的接口该如何处理

对请求进行分类,区分上报数据类和查询数据类。在切换页面时,应立即取消所有未完成的请求(可以使用axios的cancelToken)。在新页面初始化时,根据队列状态判断哪些请求需要重新发起。

扩展与总结

除了前端可以实现的优化方案外,一些优化可能需要后端的配合,例如接口合并。因此,与产品经理和后端团队的沟通协作也非常重要。通过充分理解需求和产品定位,可能会发现更多优化的可能性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号