iOS ~ 性能优化须知道

参考文档:
Instruments 官方文档
Instruments 使用教学.Video
Optimizing App Startup Time 官方.Video

iOS ~ 性能优化须知道_第1张图片
总结图

1、性能检测的工具Instruments介绍

Instruments 之 Time Profiler

主要用来查看那些耗CPU的代码是是不是在卡顿主线程

iOS ~ 性能优化须知道_第2张图片
屏幕快照 2019-02-18 下午12.16.15.png

Instruments 之 Leaks 和 Allocations

发现和定位内存泄漏

iOS ~ 性能优化须知道_第3张图片
屏幕快照 2019-02-18 下午12.17.19.png
iOS ~ 性能优化须知道_第4张图片
屏幕快照 2019-02-18 下午12.17.43.png

Instruments 之 CoreAnimation

快速的发现 alpha blending 和 offscreen render 问题

iOS ~ 性能优化须知道_第5张图片
屏幕快照 2019-02-18 下午2.42.12.png

❤️提示:symble信息缺失请看这:


iOS ~ 性能优化须知道_第6张图片
屏幕快照 2019-02-18 下午1.57.49.png

❤️提示:查看内存泄漏的小工具


iOS ~ 性能优化须知道_第7张图片
屏幕快照 2019-02-18 下午12.06.46.png

大神(要上班的斌哥)的相关文档:

  • Instruments 之 Time Profiler 使用
  • Instruments 之 使用 Time Profiler 优化启动速度
  • Instruments 之 Memory
  • Instruments 之 CoreAnimation

2、Simulator 检查alpha blending 和 offscreen render 问题

iOS ~ 性能优化须知道_第8张图片
屏幕快照 2019-02-18 下午4.32.06.png

3、Color Blended Layers 和 Offscreen Render

  • Color Blended Layers: 图层颜色混合(alpha blending)

举个例子:上层是蓝色(RGB=0,0,1),透明度为50%,下层是红色(RGB=1,0,0)。那么最终的显示效果是紫色(RGB=0.5,0,0.5)。这种颜色的混合(blended)需要消耗一定的GPU资源,在实际开发中可能不止只有两层。如果只想显示最上层的颜色,可以把它的透明度设置为100%,这样GPU会忽略下面所有的layer,从而节约了很多不必要的运算。

  • Offscreen Render: 离屏渲染

一、离屏渲染的触发方式

⭐️shadows(阴影)
⭐️shouldRasterize(光栅化)
⭐️masks(遮罩)
⭐️edge antialiasing(抗锯齿)
⭐️group opacity(不透明)
⭐️复杂形状设置圆角等…
⭐️渐变
⭐️UILabel, CATextLayer, Core Text……

二、GPU屏幕渲染有两种方式

1、On-Screen Rendering:意为当前屏幕渲染

指GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行

2、Off-Screen Rendering:离屏渲染

指GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作

❓两种渲染方式比较

相比于当前屏幕渲染,离屏渲染的代价是很高的,主要体现在两个方面:

1、创建新缓冲区
要想进行离屏渲染,首先要创建一个新的缓冲区。

2、上下文切换
离屏渲染的整个过程,需要多次切换上下文环境:先是从当前屏幕(On-Screen)切换到离屏(Off-Screen);等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上有需要将上下文环境从离屏切换到当前屏幕。而上下文环境的切换是要付出很大代价的。

三、渲染机制

CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。


❤️ 了解离屏渲染请阅读:

  • 离屏渲染优化详解:实例示范+性能测试
  • iOS探索:UI视图之卡顿、掉帧及绘制原理

iOS性能测试需关注:

  • 资源消耗
  • 内存泄漏
  • 流量消耗
  • 耗电功率
  • 渲染效果
  • 加载时间

iOS性能差的主要表现:

  • APP启动速度慢
  • 大数据量列表滑动卡顿
  • 列表图片加载过程卡顿
  • 交互事件响应慢

4、从Coding开始提高性能的技巧

  • Swift须知道:
    1、只是用Swift类型而不转为Cocoa类型
    2、尽量降低出现Optional的情况

  • 通用技巧:
    1、用ARC去管理内存(Use ARC to Manage Memory)
    2、适当的地方使用reuseIdentifier(Use a reuseIdentifier Where Appropriate)
    3、尽可能设置视图为不透明(Set View as Opaque When Possible)
    4、避免臃肿的XIBs文件(Avoid Fat XiBs)
    5、不要阻塞主进程(Don't Block the Main Thread)
    6、调整图像视图中的图像尺寸(Size Images to Image Views)
    7、选择正确集合(Choose the Correct Collection)
    8、启用Gzip压缩(Enable GZIP Compression)
    9、重用和延迟加载视图(Reuse and Lazy Load Views)
    10、缓存,缓存,缓存(Cache,Cache,Cache)
    11、考虑绘图(Consider Drawing)
    12、处理内存警告(Handle Memory Warnings)
    13、重用大开销对象(Reuse Expensive Objects)
    14、使用精灵表(Use Sprite Sheets )
    15、避免重复处理数据(Avoid Re-Processing Data)
    16、选择正确的数据格式(Choose the Right Data Format)
    17、适当的设置背景图片(Set Background Images Appropriately)
    18、减少你的网络占用(Reduce Your Web Footprint)
    19、设置阴影路径(Set the Shadow Path )
    20、优化你的表格视图(Optimize Your Table Views)
    21、选择正确的数据存储方式(Choose Correct Data Storage Option)
    22、加速启动时间(Speed up Launch Time )
    23、使用自动释放池(Use AutoRelease Pool)
    24、缓存图像(Cache Images-Or not )
    25、尽可能避免日期格式化器(Avoid Date Formatters Where Possible)


  • 优化技巧参考文章:
    25条提高iOS App性能的技巧和诀窍
    iOS应用性能调优的25个建议和技巧
    深入剖析 iOS 性能优化

你可能感兴趣的:(iOS ~ 性能优化须知道)