本文从客户端的视角,分享客户端如何协同服务端进行接口时间的优化 。
Compose是什么
接口性能优化对于客户端的同学来讲涉及可能不是很多,但是接口的性能对于客户端的体验影响是巨大的;请求失败、loading、无数据这几个关键词跟客户端的同学一提,想必接口优化的意义就不用多说了吧 。
一个快速而又稳定的接口,对于客户端的用户体验来说是大有裨益的 。本文从客户端的视角,分享客户端如何协同服务端进行接口时间的优化 。
分析
?简析
客户端的一次完整的接口请求主要包括:
- 业务发起请求
- 网络传输
- 服务端处理
- 数据响应后解析
- 图层布局与渲染
那么我们来看一下通常客户端发起一次接口请求,耗时都发生在哪些阶段:
文章插图
- Prepare:主要包括请求前的参数拼装以及发送请求处理的线程切换;
- Data Parse:业务上的数据解析,如json解析等的操作,以及线程间的切换等耗时 。
- UI Refresh:主要是视图布局,渲染的操作 。
- First Item Render:第一张卡片的渲染时间 。
从上面数据上来看,客户端的耗时主要是:
- 请求前的参数绑定过程
- 请求后数据解析
- 数据上屏的图层布局以及渲染
- 异步请求过程中的线程不断切换造成切换耗时
客户端上这些操作往往在整个链路上占比较小,且过程优化空间较小;
然而大头往往在这两个方面:网络传输和服务端处理 。
方案
?降低ServerRT(服务端处理耗时)
通常降低服务端处理耗时,是由服务端小伙伴来优化,当然优化过程中需要端上一起协助完成,大致了解一下服务端耗时的几种处理方案;
主要有这几种方式:
- 接口加缓存:合理设计临时缓存、持久缓存可以提高接口性能
- 内部接口并发请求:通常一个复杂的接口需要调用下游几个业务的接口,如果合理的进行并发请求,将会收到很好的效果
- 异步化:如写日志,更新缓存等不会影响接口准确性的非核心流程,可以采用异步方式进行处理,不阻塞主计算逻辑处理
- 数据批量处理:接口存在较大量计算,可以通过批量分批次(分而治之)方式来解决大量数据计算耗时问题
- sql加索引:数据库SQL是最常见的性能瓶颈,如SQL子查询、不合理索引设计、全表扫描、大量数据返回、大SQL等,通过监控平台查看慢查询SQL可立即找出影响接口性能瓶颈关键点
?降低网络传输时间
虽然现有阶段大多数用户网络已经很不错了,但是还是有很多场景下,网络耗时占比还是非常高,尤其长尾数据中,网络耗时往往是最大的占比,所以网络耗时的优化依然是非常重要;当然端上的小伙伴在这个阶段可参与的空间也更多 。
主要有哪些方式呢?
- 接口多段返回
通常一个接口承载了较多的内容的话,其内容就会无限的进行膨胀,如果将埋点,日志,反馈等非主线的数据进行多段返回的话将会有很大的收益,此方案主要结合接口组成进行分析;当然,此方案改动量也比较大,成本也比较高 。
- 更换协议
大多数我们接口使用的是TCP协议,相比来说如果更换UDP协议,接口返回速度会快不少,详细原因可以翻一下资料学习一下,这里不再多说 。
目前也已经有成熟的方案,比如阿里的XQUIC,有感兴趣的可以了解一下,具体的收益我这里也还在测试中 。
- 缩小网络包
为何缩小网络包会降低网络传输时间呢?
客户端和服务端网络通信时数据传输过程如下图所示:
推荐阅读
- 趣味象棋之巢覆卵破
- 中国象棋:残局破解之沃野千里
- 打麻将之前有什么禁忌?
- 趣味象棋之鸾凤和鸣
- 项羽在什么战役中失败,项羽在楚汉之争中最终失败的原因是什么-
- 胡夫金字塔的未解之谜作文400字,胡夫金字塔的未解之谜有哪些-_1
- 王自健|相声演员郭德纲在受反三俗冲击之时王自健创作《我爱郭德纲》力挺
- 苍兰诀|《苍兰诀》的火,意料之外,又是意料之中
- 周星驰|周星驰一生未娶之谜,吴孟达替他说出真相,粉丝听了纷纷落泪
- 细说普洱之评茶九,普洱生茶香气的评茶术语