背景:
公司产品对性能优化越来越高。上次对冷启动优化之后,从2.6秒优化到了0.65秒,具体可以参考 https://www.jianshu.com/p/49cecc06e99f
但是作为一款IM及时通讯产品,除了这个优化还不够。另外一个就是对于首次启动,对于点击进入聊天界面这个时间的优化,目前的问题是首次进去是1.7秒,第二次进入是0.6秒。那么这相差的1.1秒是消耗在哪了呢?
经过仔细认真的排查,发现时间耗时在获取图片展示上了。总共需要44张图片,每个图片在bundle里面。既然如此,那如果每次都能0.6秒,岂不是就能秒加载了。看一下这个方法
+ (nullable UIImage *)imageNamed:(NSString *)name;
这个有什么特点呢,看一下官方注释
image.png
咦,貌似官方会加载完之后,做一个缓存,那再次加载就快很多了。
所以,如果把需要的图片,到提前缓存一下不就好了么。完美。
image.png
如图所示,在启动的时候,直接异步把需要的图片加载一次就可以了。然后呢,然后不需要做什么,直接把存放图片的数组释放掉就可以了。因为这里加载图片唯一目的就是为了让系统有个缓存而已。等真正用的时候,直接去内存里面拿就可以了。
结果:
经过这个优化之后,把首次点击进入聊天界面从1.7秒优化到了0.6秒。完美。
拓展:
如果需要经常使用,或者性能要求高的地方,可以用 imageNamed 来缓存
如果不是经常使用,性能要求不高的地方,用imageWithContentsOfFile 因为这个方法不会加入缓存
image.png
网友评论