封装ajax之类的请求要不要考虑超时机制?

2024-08-24 22:12

本文主要是介绍封装ajax之类的请求要不要考虑超时机制?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ps:观点不一定正确,大家就是探讨一下。

我们平时接触各类ajax封装库都会带有超时机制,但像原生的fetch,都是没有请求超时的概念。为什么呢?

用fetch封装ajax请求

function ajaxRequest(url, method, data) {return fetch(url, {method: method,headers: {'Content-Type': 'application/json'},body: JSON.stringify(data)}).then(response => response.json()).catch(error => console.error('Error:', error));
}

带超时机制的ajax请求

function ajaxRequest(url, method, data, timeout) {const requestPromise = fetch(url, {method: method,headers: {'Content-Type': 'application/json'},body: JSON.stringify(data)});const timeoutPromise = new Promise((resolve, reject) => {setTimeout(() => {reject(new Error('Request timed out'));}, timeout);});return Promise.race([requestPromise, timeoutPromise]).then(response => response.json()).catch(error => console.error('Error:', error));
}

1.为什么要设计超时机制

大家可能觉得请求如果没有超时机制,就会一直卡着界面操作。这么想其实没有什么问题,但ajax请求卡多久是由客户端和服务端共同处理的结果,并且大部分是由服务端实际处理业务的时间决定。

假设客户端设置的超时时间是3s,但服务端处理业务的时间就是需要4s,并且无法优化,这种情况,前端的3s超时还有意义吗?

可能有人认为前端触发超时后,abort请求,可以降低服务端的压力,其实并不会,服务端如果不是经过特殊的设计,一旦收到客户端的请求后,就会开始一系列的执行动作,并不会因为客户端连接断开而停止或是结束执行。

2.那就不要设计超时了?

是的,准确来说是不需要前端的超时机制,像fetch这些系统函数的设计,他就是不考虑超时,服务端愿意连多久就多久。

但大家始终还是觉得这样做不靠谱,没有超时机制,我的页面岂不是会很卡。

我的观点是,超时机制还是需要的,但只要服务端控制即可,并且服务端是必需设计超时机制,一方面是保障客户端体验,另外一方面也是保护服务端自身的稳定性,避免卡性能的业务延申到后面的业务,及时结束,当然有些特殊业务可能需要特殊处理,这里说的是大多对接到客户端的请求。

如果大家在开发前就对服务端的接口提出要求,响应时间不能超过1s,那客户端的ajax超时机制是不是显得就很多余,而且要超时多少实际也不是客户端说的算,而是服务端根据自己实际的业务来定。

这篇关于封装ajax之类的请求要不要考虑超时机制?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103750

相关文章

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu