App性能优化小结

341 阅读3分钟

插一篇App性能优化的东西。个人感觉App性能优化涉及的东西挺多的,从App启动,dyld加载动态库,到runtime解析可执行文件,到main函数执行,再具体到页面的渲染,每一步都关系到优化的东西。总结一些可以优化的点,具体要做的工作量还是挺多的。

耗电量优化

耗电这个优化,个人觉得有点虚,降低屏幕亮度,也能优化的,而且很直接。。。也有几个点值得做一下。

  1. 降低CPU,GPU的功耗。具体一点就是页面的布局,渲染等操作相关的优化,可以参考大牛的博客
  2. 启用大量的定时器,也会增加耗电
  3. 大量的I/O操作。尽量不要频繁的进行小数据的读写,最好批量一次性写入,可以设定一个值,攒够多少条,或者多大的数据做一次写入操作。读取大量重要数据的时候,考虑使用dispath_io,它提供了基于GCD的异步操作文件I/O的API。使用dispatch_io,系统会优化磁盘访问。另外,I/O次数过多,也可以考虑NSCache缓存。
  4. 网络优化。减少、压缩网络数据。如果多次网络请求数据相同,可以考虑使用request的cache
    使用断电续传,避免网络不稳定,多次传输相同内容。网络不可用时,要避免进行网络请求,发起请求前判断当前网络状态。使用批量传输,比如下载很多图片,可以尝试批量下载。
  5. 针对定位的优化。如果只需要快速定位,直接使用CLLocationManager的requestLocation方法,
    ,定位完后,会自动让定位模块断电。尽量不要使用位置的实时更新,定位完后,关掉定位服务。 需要后台定位的话,设置CLLocationManager的pausesLocationUpdatesAutomatically为Yes。

App启动优化

App启动优化可以大致分为三个阶段,针对不通阶段做优化。

  1. dyld阶段

App刚刚启动的时候是有dyld加载可执行文件、加载动态库的过程。针对这个过程,我们可以减少动态库数量、合并动态库,定期清理不必要的动态库。

2.runtime阶段

减少Objc的类和category的数据,减少selector的数量,定期处理没有用到的类、分类文件。减少c++虚函数数量,swift尽量使用struct。用+initialize方法和dispatch_once取代所有的__attribute__((constructor))、Objc的+load方法

3.main阶段

也就是application:didFinishLaunchingWithOptions:阶段,尽最大程度按需加载。可以延迟的操作,就不要放在这个方法里,这方面的优化具体也会涉及到业务,根据具体业务,具体分析吧。

以上,简单总结吧,优化上要做的东西挺多的,不同App需要优化的点也不同,借助工具,具体问题具体分析吧。还有CCache对项目编译的优化,提升编译速度,可以尝试~

参考:【iOSApp启动性能优化】 【性能优化深度探究】 【深入理解App启动过程】