阅读 229

SDWebImage性能问题分析及再优化方案(sdwebimage缓存机制)

大部分第三方框架并不是完美的,只是我们缺乏思考,后面会针对更多的第三方进行缺陷分析。

SD的源码分析资源很多,这里简单总结下核心,在这个基础上分析下在性能方面上是否还有进一步的操作空间。

SD的核心任务有两个:图片解码 + 缓存,这两个步骤都在子线程上处理的。

核心一解码:如图,SDWebImageDecoder的部分代码,图片解码操作

核心二缓存:如图,SDImageCache文件部分代码,图片存入缓存磁盘操作

注意,从代码上看SD存入本地是PNG或者JPG文件,也可以在沙盒找到SD相关的缓存文件夹来验证,是PNG和JPG。

我们需要了解一点UIImagePNGRepresentation和UIImageJPEGRepresentation生成的PNG和JPG,是对图片进行了一次压缩编码,如果再次加载出来,是需要重新解码的。

换个角度理解:图片压缩的PNG或者JPG格式,对应于文件压缩的zip或者rar格式,文件使用时需要对zip或者rar解码,图片显示时,需要对PNG或者JPG解码。

可以尝试如下代码,对图片操作进行更深入的了解:

问题总结:

一、SD存储到本地缓存时,对图片重新进行了一次编码。

二、SD从本地缓存中加载图片时,需要重新对图片进行解码。

编码和解码是比较消耗资源的操作,可以再这个步骤上进行再优化。

优化方案:

对本地缓存进一步优化,存储解码后的数据,可以省略掉上面问题总结提到的一、二涉及到的编码和解码操作。

方案中,需要我们自定义数据结构进行存储,数据结构包含:图片属性格式 + 图片数据格式;图片文件属性数据格式,如图片的width,heigth,colorSpace,bitsPerComponent等;图片数据格式, 如RGBA像素数据。

数据结构如:前100个字节是图片属性数据,后面的字节就是RGBA数据,
前100个字节中,0到4个字节是图片的width,5到8个字节是图片的height,等等。

方案的优劣分析:

1、缺点:存储解码后的数据会占用更多的磁盘内存

2、缺点:需要自定义数据结构进行存储,存入的文件不能像PNG或者JPG看到文件图像效果,本地化没有可视化效果

3、优点:省略了部分编码和解码操作,性能得到提升,而且自定义数据结构可以看作是对图片的一种浅加密,只有熟悉你的数据结构,才能解码出图片

 伪原创工具 SEO网站优化  https://www.237it.com/ 

作者:Bug杀手_全栈
链接:https://juejin.cn/post/7014264121566691365

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐