项目中如何优化细节

一.内存优化
1.减少内存泄露。如Timer,Delegate,Block,CoreFoundation对象(C对象),Image

2.降低内存使用峰值。如使用懒加载

二.性能优化

卡顿产生的原因:

CPU计算时间以及GPU渲染时间较长,造成Vsync(垂直同步的信号)刷新衔接不上

解决卡顿主要思路:

尽可能减少CPU、GPU的资源消耗

优化方法(CPU方面):

1.尽量使用轻量级的对象,如果用不到事件处理的地方,我们就使用CALayer来取代UIView

2.不要频繁的调整和调用UIView相关属性,frame、bounds、transform等

3.尽量提前计算好布局

4.autolayout的布局比frame消耗更多CPU资源

5.图片的size和UIImageView的size最好一致,因为CPU会去计算和伸缩这个图片

6.控制线程的并发数量,把耗时的操作放到子线程,比如:

①文本计算,计算宽度和高度

②在图片显示之前进行解码和绘制(默认是在主线程)

优化方法(GPU方面):
1.尽量减少视图数量和层次,渲染次数就减少

2.尽量避免短时间内大量图片的显示,可以根据需求将多张图片 合成一张显示

3.减少透明的视图

4.减少离屏渲染,例如:

遮罩layer.mask

圆角layer.CornerRadius

阴影layer.shadow

这三个操作会触发离屏渲染

instrument如何检测卡顿?

使用CoreAnimation来查看程序显卡性能以及CPU使用情况

使用TimeProfiler查看系统耗时

三.耗电量优化耗电主要来源:

1.CPU处理(大量事件处理)

2.联网状态(大量的网络交互)

3.定位(持续使用定位)

4.图像(图片处理、渲染)

优化方法:

1.尽可能降低 CPU和GUP的消耗

①少用定时器

②减少文件读写(蓝牙传输文件),如果数据量比较大就使用SQLlite、CoreData

2.减少和压缩网络数据

①图片压缩、XML文件压缩

②如果多次请求的返回数据相同的,就使用缓存

③尽量使用断点续传,减少请求数据的交互

④网络情况不好或者不可用时,不要执行网络请求

3.定位优化

①如果是定位用户位置,使用CoreLocationManager的requestLocation方法,定位完成后就停止定位设备的供电

②如果不是导航应用尽量不要实时更新位置,定位完毕就关掉定位服务

③如果不是必须,就降低定位精准度

四.安装包瘦身

1.资源压缩(图片、视频、音频等)采用无损压缩,采用工具进行

2.去除无用资源,网上有开源的检测插件

3.可执行文件瘦身,检测未使用的代码,网上有开源的检测插件

4.使用插件检查linkmaps,可以检测出具体的文件大小,这样可以针对文件的大小进行文件内容优化

五、启动时间优化启动过程

1、加载dyld到App进程

2、加载动态库(包括所依赖的所有动态库)

3、Rebase

4、Bind

5、初始化ObjectiveC Runtime

6、其它的初始化代码

启动时间是用户点击App图标,到第一个界面展示的时间。以main函数作为分水岭,启动时间其实包括了两部分:main函数之前和main函数到第一个界面的viewDidAppear:。所以,优化也是从两个方面进行的,个人建议优先优化后者,因为绝大多数App的瓶颈在自己的代码里。

Main函数之后

1、能延迟执行的就延迟执行。比如SDK的初始化,界面(UIViewController)的创建。

2、不能延迟执行的,尽量放到后台执行。比如数据读取,原始JSON数据转对象,日志发送。

Main函数之前

1、合并动态库,比如公司内部由私有Pod建立了如下动态库:XXTableView, XXHUD, XXLabel,强烈建议合并成一个XXUIKit来提高加载速度。

2、合并Category和功能类似的类。比如:UIView+Frame,UIView+AutoLayout…合并为一个

3、删除无用的方法和类。

4、+load() 方法里的内容可以放到首屏渲染完成后再执行,或使用 +initialize() 方法替换掉。因为,在一个 +load() 方法里,进行运行时方法替换操作会带来 4 毫秒的消耗。不要小看这 4 毫秒,积少成多,执行 +load() 方法对启动速度的影响会越来越大。

5、控制 C++ 全局变量的数量。

六、项目中解决的难点(直播弹幕方面)线程安全、UI轻量化、弹幕集中化(某时间段大量弹幕)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值