//启动优化、内存优化、卡顿优化、线程优化、电量优化、包体积优化
//数据缓存、多线程、tableview 高度缓存、异步绘制、离屏渲染、重用机制、少用xib、
2、卡顿监控:FPS监控
性能问题的解决方法:
1、优化业务流程
2、合理的线程分配
3、预处理和延时加载
预处理:是将初次显示需要耗费大量线程时间的操作,提前放到后台线程进行计算,再将结果数据拿来显示。
延时加载:是指首先加载当前必须的可视内容,在稍后一段时间内或特定事件时,再触发其他内容的加载。这种方式可以很有效的提升界面绘制速度,使体验更加流畅。(UITableView 就是最典型的例子)
4、缓存
5、使用正确的API
tableView:
提前计算好cell的高度,缓存在相应的数据源模型中
尽可能的降低storyboard,xib等使用度
滑动过程中尽量减少重新布局
不要阻塞主线程
TableViewCell 复用
在cellForRowAtIndexPath:回调的时候只创建实例,快速返回cell,不绑定数据。在willDisplayCell: forRowAtIndexPath:的时候绑定数据(赋值)。
视图层级优化: 减少subviews个数,用layer绘制元素。少用 clearColor,maskToBounds,阴影效果等。善用hidden.
减少透明 view
减少离屏渲染
离屏渲染的优化建议
(1) 使用ShadowPath指定layer阴影效果路径。
(2)使用异步进行layer渲染(Facebook开源的异步绘制框架AsyncDisplayKit)。
(3)设置layer的opaque值为YES,减少复杂图层合成。
(4)尽量使用不包含透明(alpha)通道的图片资源。
(5)尽量设置layer的大小值为整形值。
(6)直接让美工把图片切成圆角进行显示,这是效率最高的一种方案。
(7)很多情况下用户上传图片进行显示,可以在客户端处理圆角。
(8)使用代码手动生成圆角image设置到要显示的View上,利用UIBezierPath(Core Graphics框架)画出来圆角图片。
按需加载
1、局部刷新,刷新一个cell就能解决的,坚决不刷新整个 section或者整个tableView,刷新最小单元元素。
2、利用runloop提高滑动流畅性,在滑动停止的时候再加载内容,像那种一闪而过的(快速滑动),就没有必要加载,可以使用默认的占位符填充内容。
网友评论