在网上找了好久,没有遇到过这种问题的开发者吗?我在网上只是找到了有iOS的使用者说玩游戏的时候,iOS11 iOS12会掉帧,没有遇到问题,只能说您是幸运的,bug这种东西永远发现不完,永远解决不完,但是看到这个问题的同学们应该都是遇到掉帧这个问题了。
bug发现背景:我们的商城APP在线上交付一些客户后,有极少数的客户会报这个bug,说我怎么滑动总感觉卡顿,然后我这边也确实复现了这个bug。
bug的原因:因为我们公司是做平台类的,说白了我们的商城模块要兼容市面上大部分的商城APP的开发需求,但是肯定是一个APP,那肯定就是一套代码了,有些同学可能就会说了,商城不就那么些东西嘛,有什么好兼容的,那您细细听我说,我们商城首页总共最多可以支持13个section,每个section里边各有不同,我们会根据配置来画不同的界面,来加载不同的cell,说出来可能都不信,目前我们的商城首页用了31个cell,因为要根据配置来显示各种对应的cell,当然了,最多是13个section,是最多哦,所以可能是8个section,10个section等等,所以就苦了heightForRowAtIndexPath这个方法了,这个方法里边写了将近300行代码,然后还有section都是没有上拉加载的,其中一个section是加店铺的,没有做上限,客户加了100多个店铺,导致滑动的时候就感觉特别卡,肯定卡啊
bug解决:我想着一直调用heightForRowAtIndexPath,然后里边有各种计算行高的方法,所以我就想着缓存了下高,把高度缓存下来,然后再看,根本没有我想象中的那么好,还是卡,真坑,为什么会这样,对了,网上最普遍的解决方案就是把预估行高设置为0,但是,但是。。。对吧,不说那么多,都懂的,没什么用的,即便有用,在这么复杂的业务场景里边肯定也不好用的,但是在那种简单的业务场景上,不会感觉到卡吧,最起码我在别的简单点的就没有客户反馈这种卡的情况。
bug再探索:网上找,有苹果用户说玩游戏的时候iOS11 iOS12这种的会掉帧,作为一个开发者,我是不相信的,这么严重的bug,苹果会退出来系统吗?他们之前没测出来就发布吗?然后我赶紧试了试别的低版本的系统,iOS8,iOS10我都试了下,同样的业务场景,不会卡,好吧,好吧,但是这只是视觉上的,我还是用代码来证明高版本的系统确实有这样的问题,所以又写了个测试帧率的类,具体代码如下:
自己把这个label加到这个页面上滑动测试,好吧,在iOS10及以下的系统上基本不会掉帧,稳定在60,但是在高版本系统上很明显的,会掉到8FPS,10几FPS,不卡才怪呢,所以,所以,没办法解决吗?最终我这边的解决方案就是两个,每个section添加的条目都有个数限制,条目少,相对来说视觉上冲击不会这么大,在最下边的热门推荐行列就是采用上拉加载一次不要请求太多,通过上拉加载的方式来做,然后行高也做了缓存,最终算是解决了这个问题,还有就是xib,storyboard,怎么说呢,用的太多,也会消耗性能,但是有办法吗?需求紧,任务重,纯代码肯定会好很多,毕业前两年写了两年的纯代码,现在是写了两年的xib,没办法,商城类APP,要是一行行代码来写UI。。。
结尾处有两点: 1.希望有同学有更好的建议可以提出来,咱们一块探讨 2.有时间的情况下尽量用纯代码来写,工程里边用大量的nib文件真的会好性能的。