淘宝app安卓开发教程 淘宝手机端深度优化
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
Android 端图像加载、显示、处理、监控集一体的一站式解决方案。
背景?
Phenix 图像加载体系是立足手淘面向阿里巴巴全集团打造的一款 Android 端集图像加载、显示、处理、监控于一体的一站式解决方案。基于高可用、高性能、可高度定制、数据服务、省流量五大核心优势而被集团各个业务接入使用,经过长期的迭代与维护进入了相对成熟和稳定的模式。
?
在如今更加追求体验的背景下,对图片库提出的要求也越来越高。而图片加载长尾问题,特别是在中低端机和弱网条件下体现的更加明显。因此我们以手淘为出发点,基于用户舆情反馈以及图片库自身埋点数据,对影响图片正常展示的长尾问题进行了较为完整的梳理。
?
据统计,淘宝 Android 端每月图片类舆情在几百条,基本都表现出白屏、图片加载失败的现象。其中明确图片加载慢的 case 下,基本有以下几个因素:
?
- 用户网络慢,图片下载耗时久
- 磁盘缓存读取耗时,存在读取阻塞未返回的情况
- 图片尺寸大,原图访问?RT?耗时久
?
问题发现
结合舆情日志,通过图片库埋点数据统计发现:
?
- 图片加载磁盘读取慢(超过?N?秒)?次数每日百万次以上
- 图片库内部线程调度慢?(超过?N?秒)次数每日千万次以上
- 图片网络错误类中,超时和连接错误每日次数亿次以上
- 首页信息流图片秒开率低,主要受制于原图访问问题
?
深入剖析场景根因
?磁盘读取阻塞
?
磁盘缓存读取作为图片加载流程中非常关键的一个环节,发生阻塞时后续联网下载图片资源、图片解码、图片上屏等流程会被动等待,在用户视角即为图片未加载或页面白屏。
?线程调度频繁?
?
图片库将图片的请求分割到多个阶段? 1. 内存缓存查找;2. 本地图片处理;3. 磁盘缓存查找;4. 网络请求;5. 图片解码;6. 图片回调上屏。
?
每个阶段都会进行线程切换,这些任务都共享一个大的线程池,频繁的线程切换会增加性能损耗。
?
?
?
图片库内部针对网络任务(包括网络连接和网络数据下载)制定了特殊的调度器,该调度器限制了在强弱网环境下允许被传递到线程池中的最大任务数。
?
而弱网条件下图片数据返回慢,后续图片请求任务被阻塞在网络调度器的内置队列中,而不会进入线程池等待被执行,图片加载流程会因为排队而阻塞在队列中,上屏时间被延后,影响用户体验。
?
?
图片网络数据下载受限于网络速度,弱网条件下数据返回慢。在图片库共享线程池时,网络下载任务占用着线程不释放,会造成两个比较明显的问题:
?
- 当前图片加载流程被阻塞
- 线程池中线程被占用,后续图片请求需要排队等待
?
?
?
选取 JPG/PNG/WEBP/HEIC 几种图片在最近一个月的整体加载时长,从图中我们可以看出与其他图片格式相比,HEIC格式图片的整体耗时是最短的。这对于用户体验,特别是在中低端机上的体验是有明显的差距的。
?
非 HEIC 图片在 CDN 命中率低,绝大多数情况下会访问原图。同时图片尺寸大,再加上图片库内部的调度策略受网络资源下载时长的影响,会加剧单张图片加载总耗时。
?
?
此外,【【微信】】 引入了对使用 AV1 图片文件格式?(AVIF)?图片的支持,这种格式可以显著提升相同文件大小下的图片质量,而图片库目前还不支持。
?
分场景优化
基于以上提出的几类比较明显的限制根因,我们为图片上屏的场景分别制定了优化方案,并通过解决图片加载长尾问题来提升用户体验。
?
?..最新助力活动,最新助力活动,天猫交流群在哪里找到,想进天猫618 狂欢盛典微信投票互助群500人 2023 淘宝618 年中大促最新助力活动 2023年 618天猫购物狂欢节天猫交流群在哪里找到 的小伙伴,关注加好友,加入互助群