前端性能优化—预请求本文探讨了通过预请求优化接口响应时间的方案,预请求是一种通过预判用户行为,提前发起API请求并缓存结

我们先简单描述一下这个几个名词区别,避免我们在后续讨论的过程中产生歧义,给预请求下一个简单的定义

在开始之前通过下面的图片可以看一下我们具体优化场景,便于后续更好的讨论解决方案

上图是机票列表页接口的耗时,整整花费了6S,可以看出来,这其中的优化空间还是很大的,而且这个页面可以交互的前提是列表页渲染出来

预请求和预加载很类似,合适的时机提前发起请求,然后存在某个地方,下一次获取时直接从缓存中获取,这是一个简单的模型,我们用一张图来表示如下:

通过上述模型我们不难发现,有一个关键点我们必须解决

如何统一劫持请求,如果不能劫持请求,我们就没办法控制请求是否走缓存

预请求的方案并不是我们原创,事实上已经有很多技术栈开始采用这种方案来解决问题,useQuery,SWR等提供了缓存请求结果的方案,但是这些都有一个前提是页面都采用了相同的技术栈,对于跨应用跨技术栈的场景我们需要一个更加通用的方案,毕竟将现有的请求库全部替换的RIO并不高。

以下是目前内部采用的一些方案

1、利用BFF进行缓存

在首页时,寻找合适的时机提前发送请求给BFF,BFF在拿到结果后将内容缓存到Redis中,在下一次正式请求发起时,如果能够拿到Redis缓存可以直接返回从而提升接口响应的速度

2、利用Native进行缓存

这种方案比较适用于混合开发,Native+H5的方式,客户端负责劫持请求并缓存内容,当下一次重复的请求发起时可直接返回缓存

3、利用serviceWorker进行缓存

基于我们对通用方案的要求,最终我们选择了ServerWorker作为缓存和劫持请求的基础

通过ServiceWorker劫持缓存

如果想要完成预请求,首先我们要对fetch事件有所掌控,我们可以修改全局的fetch方法或者统一收口请求方法,这两种方法都免不了对现有项目的侵入,统一请求库目前还不具备基础,servcieWorker正好提供了这样的能力,也非常适合做请求的拦截,我们只需要对serviceWorker稍加定制即可实现一个简单且通用的预请求方案。

通过在请求头中添加特殊标识

在劫持请求后我们需要识别当前请求是否预请求,因为预请求和正常请求的逻辑有所区别,预请求在请求完成后需要将请求出入缓存,而正常请求需要在发起真实请求之前,查找当前是否有可用的缓存,如果有缓存,直接返回缓存,这样就加快了第二次请求的速度,也避免了多余的网路开销

在发起预请求之前,在requestheader添加特殊标识,这样serviceWorker就能知道当前的请求是否预请求

利用request的信息typeurlbody计算出cacheKey,通过cacheKey存入和读取缓存

在解决了上述两个问题后,还有一个关键问题需要解决,什么样的请求认为是同一个请求,为了确保只有相同的请求,需要尽量保留了请求的信息,如:requestbody,requesturl,requestmethod,所以我们的基本思路是通过以上请求信息计算cachekey,但是如果简单粗暴的这么实现任然有些问题,因为在请求中有一些特殊参数,例如GE,X-tradeid,这类参数是为了为了更好的追踪这次请求而增加的参数,如果我们将这些参数也包含在计算cachekey的信息中,那么我们始终无法命中缓存,因为GE每一次请求都会发生变化,所以我们在计算cache之前需要排除这些干扰信息

通过对请求参数+URL+Type计算出cachekey,如果是预请求,通过cachekey存入缓存;如果是正常请求,利用cachekey查找缓存这样就能保证相同的请求命中缓存。

以上就是基于serviceWorker的方案设计,如果感兴趣的可以留言,在后续更新实践效果以及开源的版本

THE END
1.服务响应时间和服务保障方案20241112.docx服务响应时间和服务保障方案一、服务响应时间1.在线客服:我们的在线客服团队7×24小时为您提供服务。无论您遇到任何问题,都可以随时通过在线客服与我们取得联系。我们承诺,在您提交问题后的30分钟内,会有专业客服人员与您取得联系,为您提供解决方案。2.电话客服:如果您更倾向于通过电话与我们的客服人员沟通,您可以拨打https://www.renrendoc.com/paper/359801519.html
2.工程服务响应时间方案.docx工程服务响应时间方案.docx,工程服务响应时间方案 背景 在工程服务领域,响应时间是非常重要的指标。客户对于工程服务的需求往往是紧急的,需要工程服务商能够在较短的时间内响应,解决问题。因此,工程服务商需要有一套完善的响应时间方案,来保证客户的满意度。 目标 本文https://m.book118.com/html/2023/1024/8057105030006000.shtm
3.讲一下优化接口响应时间的几种方案对于优化接口响应时间,有以下几种方案可供选择:1.优化数据库查询,比如通过创建索引,降低查询操作的时间;2.减少数据传输量,比如使用压缩算法来减少数据的传输量;3.缓存技术,比如使用缓存来减少对数据库的访问次数;4.使用静态资源,比如使用 CDN 来加速静态资源的加载;5.优化代码,比如使用多线程、多进程等技术来提升程https://wenku.csdn.net/answer/f60fc1f3d577420f98321ee798754cea
4.优化服务器响应时间的方法如下检查数据库连接:确保数据库查询效率高效,避免长时间的数据库连接,这可能会延长服务器的响应时间。 优化输入/输出操作:检查服务器的I/O操作,确保没有过慢的读写速度,这些操作如果效率低下,会直接影响到响应时间。 解决资源冲突:如果服务器上运行的多个进程或文件相互锁定,可能会导致等待时间增加,从而影响响应速度。 https://developer.aliyun.com/article/1491822
5.java怎么获取请求时间和响应时间在现代Web应用中,性能监控是非常重要的一部分。为了解决这一需求,开发者常常需要跟踪请求的开始和结束时间,以便计算响应时间并进行性能分析。本文将介绍一种基于Java的方案,通过拦截HTTP请求获取请求时间和响应时间,并输出相关的日志信息以便后续分析。 方案设计 https://blog.51cto.com/u_16175500/11757240
6.如何提高服务器的响应时间优化策略:加速服务器响应时间秘籍如何显著提高服务器的响应时间:全面策略与优化指南 在当今数字化时代,服务器的响应时间直接关系到用户体验和业务效率 一个快速响应的服务器不仅能提升用户满意度,还能在激烈的市场竞争中占据优势 然而,提高服务器响应时间并非一蹴而就,需要多方面的策略和优化措施 http://www.iis7.com/2034/2024/11/19097b.html
7.电商客户服务响应时间优化方案电商客户服务响应时间优化方案总结 为提升电商客户服务响应时间,需要完善客户服务流程、引入智能客服系统、优化客户服务工具、建立快速响应机制,并通过定期调查和用户评价不断改进。只有将客户需求置于首位,提供高效、优质的服务,电商平台才能获得用户的信赖和持续发展。?https://wenku.baidu.com/view/09f9c0af4835eefdc8d376eeaeaad1f3469311e3.html
8.如何提升标书中的服务响应时间?2. 设立优先级和紧急情况处理机制:在标书中描述供应商的优先级和紧急情况处理机制。客户通常希望在遇到紧急问题时能够及时获得响应和解决方案。供应商可以设立不同的优先级,例如高、中、低,以便快速识别和处理紧急情况。 3. 使用自动化工具和技术:标书中可以介绍供应商使用的自动化工具和技术来提升服务响应时间。例如https://biaoshu.wtd56.com/article/v2T3c6fALGZ9UQCw.html