提示:因为后台返回的图片URL可能会带有一部分图片处理参数,例如https://img11.360buyimg.com/img/pingou-head/25.jpg!webp,直接追加图片参数可能会导致图片处理参数不生效,或格式错误导致加载失败。所以转换时会先将所有图片参数提前计算出来,之后一起处理,避免添加重复参数。域名统一
提示:android设备因为屏幕差异比较大,更适合使用固定的scale。太多的图片尺寸不利于CDN缓存,无缓存的时候需要对图片进行相关参数处理,图片处理本身是耗时操作。Scale降级
提示:由于目前图片服务器并不支持GIF转webP,GIF并没有做处理。URL预处理缓存
提示:这里也可以通过 GIF 图片缓存 Buffer 控制内存总量,但是会导致更频繁的解码造成更多的 CPU 消耗。图片内存缓存上限
优化前内存波动很明显后续优化方向
优化后内存倾于平稳
提示:保存每一帧也会导致更多的内存消耗。目前APP中通常是小尺寸的GIF所以整体可控。可以考虑设置缓冲区上限来控制缓存的图片帧数避免内存过高。
提示:使用系统支持硬解码的图片格式更有优势。硬解码就是使用GPU进行解码,相比使用CPU软解码性能更好更省电。
提示:相比GIF,WebP的解码比GIF占用更多的CPU资源。有损WebP的解码时间是GIF的2.2倍,而无损WebP的解码时间是GIF的1.5倍。
提示:这里主要是以VP8编码格式的WebP,VP9编码格式的WebP整体性能和HEIC差异不大。Flutter
不过这些图片格式需要图片服务器支持之后才能使用。
提示:纹理可以复用内存中的位图缓存,所以并不会导致更多的内存占用。纹理方式大概能减少30%的内存消耗相比Flutter引擎图片库,主要是一些其他对象使用导致。优化H5图片加载
提示:因为WebView不支持直接传递位图二进制数据显示,所以需要提前转换为PNG/JPG二进制数据传递。所以对于其他图片格式增加一次PNG/JPG编码过程会造成更多的性能消耗。不过对于Android系统应该可以在web内核层优化减少这块消耗。总结
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |