彩蛋:veImageX体验版
web体验版
给自己项目图片压缩下。比市面上的压缩好用很多
抖音图片优化背景
抖音平台随着图文、电商、即时通讯等业务的扩展,图片加载量大幅增加,导致图片带宽成本增加,用户浏览体验亟需提升。因此,抖音持续优化图片能力,通过提高加载速度、降低成本,实现图片展示的“好快省”。
BDFresco简介
BDFresco是火山引擎veImageX团队基于开源Fresco优化的Android图片框架,覆盖字节几乎所有App,提供图片网络加载、解码、基础处理与变换、质量监控、自研HEIF解码、缓存策略等能力。
优化思路
图片加载过程涉及内存、解码、磁盘和网络四大核心阶段。抖音通过优化这些阶段,提高图片加载效率并降低成本。
1. 内存缓存优化
1.1 内存查找优化
通过剔除不必要的内存缓存查找,减少UI线程负担,提升大盘帧率。
1.2 动静图缓存拆分
将动图和静图缓存分开,避免互相替换,提升缓存命中率,减少解码操作,优化OOM和ANR问题。
2. 图片解码优化
2.1 解码格式优化
根据设备性能和图片透明度需求,灵活使用ARGB_8888和RGB_565格式解码,减少内存占用。
2.2 HEIF解码内存优化
通过减少Java层大数组创建,降低内存占用和GC频率,优化解码性能,提升流畅度和ANR指标。
3. 磁盘缓存优化
通过增大存储空间和推广独立磁盘缓存,提高磁盘缓存命中率,减少图片请求量,降低带宽成本。
4. 网络加载优化
4.1 图片格式优化
推广使用heic格式,大幅减少带宽成本和加载时间。优化动图独立缓存,避免帧率下降问题。
4.2 按需缩放
根据控件大小调整图片尺寸,减少带宽浪费和内存占用,提高CDN缓存命中率。
5. 异常恢复
在系统内存告警时,释放图片内存缓解压力。通过OOM兜底逻辑,主动catch异常,清理大图内存,减少崩溃几率。
最下面的彩蛋
为进一步提升图片加载效率和用户体验,抖音将继续在以下几个方面进行探索:
-
智能图片压缩:通过机器学习算法,根据图片内容和用户设备自适应调整压缩比,实现质量与速度的最佳平衡。
-
预加载机制:根据用户浏览习惯和网络状况,智能预加载图片,减少等待时间,提高体验。
-
多级缓存协同:在内存、磁盘、CDN等多级缓存之间优化协同机制,提高整体缓存命中率,进一步降低带宽成本。