美文网首页
性能优化+界面优化

性能优化+界面优化

作者: 冰山_X | 来源:发表于2021-06-16 20:08 被阅读0次

    性能优化

    选择正确的collection

    • array使用index查找很快,使用值查找元素很慢
    • dictionary使用键找值很快
    • set:无序的一组值。使用值查找很快,插入/删除很快

    尽量保持UIImageView和图片大小一致

    重用和延迟加载

    缓存

    • 缓存不经常改变但经常使用的数据(图片,计算结果,cell行高)

    界面优化

    避免图层混合

    • 确保控件opaque属性为true
    • 确保backgroundColor不透明
    • 不要设置低于1的alpha值
    • 确保UIImage没有alpha通道

    UILabel图层混合解决方法

    • 设置背景色为不透明并设置label.layer.masksToBounds=Yes(图层从CALayer变成UILabelLayer,周围多了一层透明的图层,使用masksToBounds裁剪调)

    图层混合的检测

    • 真机:XCode->Debug->View Debugging->Rendering->Color Blended Layers
    • 模拟器:XCode->Debug->Color Blended Layers

    UITableView优化

    • 重用cell
    • 缓存行高,如果固定,使用rowHeight
    • 减少subviews数量,否则,使用drawrect添加
    • 使用rowHeight、sectionFooterHeight和sectionHeaderHeight来设定高度,不请求delegate
    • 如果cell的内容来自网络,使用异步加载,缓存结果
    • 避免渐变,图片缩放
    • 局部刷新,避免reloaddata
    • 耗时操作,异步处理
    • 滑动过程不进行图片加载,停止滑动再加载图片
    • cell类型尽量少,可以善用hide
    • 尽量使所有的 view 的 opaque 属性为 YES,包括 cell 自身,以提高视图渲染速度(避免无用的 alpha 通道合成,降低 GPU 负载)
    • 使用 shadowPath 来画阴影
    • 不要动态添加view到cell里面,应该初始化的时候添加,使用hide处理
    • 避免触发离屏渲染,maskToBounds会触发,drawRect也会触发,应减少
    • 由于图片设置圆角,正常情况下是需要maskToBounds的,这个时候会触发离屏渲染,所以得换:使用蒙版+贝塞尔曲线加圆角

    CPU

    • 对象的创建/销毁
    1. 尽量使用轻量级的对象,CALayer代替UIView,Int代替NSNumber
    • 对象属性的调整
    1. 尽量减少调整UIView的属性,尽量减少不必要的修改,frame,bounds,transform
    • 布局计算
    1. 尽量提前计算好布局,在需要的时候一次性调整好布局,不要多次修改属性
    • 文本的计算和排版
    1. Autolayout比直接设置frame消耗更多的CPU资源
    • 图片的格式转换和解码
    1. 图片的size尽量跟UIImageview的size大小一致
    • 图像的绘制(Core Graphics)
    1. 控制线程的最大并发数
    2. 把耗时操作放在子线程处理

    文本处理(尺寸计算/绘制)
    图片处理(解码/绘制)

    GPU

    • 纹理的渲染
    1. 尽量避免短时间内大量图片的显示,尽可能将多张图片合并成一张显示
    2. GPU处理的最大纹理尺寸为4096*4096,超出部分就会占用CPU资源进行处理,所以纹理不要超过这个尺寸
    3. 尽量减少试图层次跟数量
    4. 减少透明试图,不透明的就设置opaque为YES
    5. 尽量避免出现离屏渲染

    原因:
    1 创建缓冲区
    2 切换上下文

    触发
    1 光栅化 layer.shouleRasterize = YES
    2 遮罩 layer.mask

    3 圆角 同时设置layer.masksToBounds = YES和layer.cornerRadius>0
    考虑使用CoreGraphics绘制裁剪圆角,或者直接提供圆角图片
    4 阴影,layer.shadowXXX
    如果设置了layer.shadowPath就不会产生离屏渲染

    耗电优化

    • 定时器
    • I/O操作
    1. 避免频繁使用
    2. 大量数据使用dispatch_IO 异步操作
    3. 数据量大使用数据库
    • 网络优化
    1. 减少/压缩网络数据
    2. 请求结果相同,缓存
    3. 断点续传
    4. 无网络,不要请求
    5. 可取消长时间请求,设置超时时间
    6. 批量传输,减少请求次数
    • 定位优化
    1. 快速获取位置,使用requestLocation
    2. 如果不是导航应用,尽量不要实时更新位置,定位完毕就关闭服务
    3. 尽量降低精准度
    4. 需要后台定位时,设置可暂定位置更新

    相关文章

      网友评论

          本文标题:性能优化+界面优化

          本文链接:https://www.haomeiwen.com/subject/ilwasltx.html