avatar

Catalog
iOS性能优化04-卡顿优化02-GPU
  • 尽量减少视图数量和层次

  • 尽量避免短时间内大量图片的显示,尽可能将多张图片合成一张进行显示

  • 减少透明的视图(alpha<1),不透明的就设置opaque为YES

  • GPU能处理的最大纹理尺寸是4096*4096,一旦超过这个尺寸,就会占用CPU资源进行处理,所以纹理尽量不要超过这个尺寸

  • 尽量避免出现离屏渲染

离屏渲染

  • 在OpenGL中,GPU有2种渲染模式

    • On-Screen Rendering:当前屏幕渲染,在当前用于显示的屏幕缓冲区进行渲染操作
    • Off-Screen Rendering:离屏渲染,在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作
  • 离屏渲染消耗性能的原因

    • 需要创建新的缓冲区
    • 离屏渲染的整个过程,需要多次切换上下文环境,先是从当前屏幕(On-Screen)切换到离屏(Off-Screen),等到离屏渲染结束后,将离屏缓冲区的渲染结果显示到屏幕上,又需要将上下文环境从离屏切换到当前屏幕
  • 哪些操作会触发离屏渲染?

    • 光栅化,layer.shouldRasterize = YES
    • 遮罩,layer.mask
    • 圆角,同时设置layer.maskToBounds = YES、layer.cornerRadius 大于0(考虑通过CoreGraphics绘制裁剪圆角,这个网上例子有很多我就不多说了,大家随便搜一搜都可以搜到,或者叫美工直接提供圆角图片)
    • 阴影, layer.shadowXXX (但是如果设置了layer.shadowPath就不会产生离屏渲染了,不设置默认是环绕layer添加的)

喜欢的朋友可以扫描关注我的公众号(多谢支持)

Author: 木子召
Link: https://lizhaobomb.github.io/2020/02/29/iOS%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%9604-%E5%8D%A1%E9%A1%BF%E4%BC%98%E5%8C%9602-GPU/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment