美文网首页
Vickate_积累及优化

Vickate_积累及优化

作者: Vickate | 来源:发表于2017-12-15 16:51 被阅读0次

关于优化的建议:

1. 首页的启动速度

**建议:**

- 启动的过程中做的事情越少越好
- 不要在UI线程上做耗时操作(子线程处理数据,处理完在UI上刷新数据)
- 在合适的时机开启后台任务

**优化方法:**   

- 量化启动时间
- 启动速度模块化
- 辅助工具(友盟,听云,Flurry)

2. 页面浏览速度

- JSON处理(NSJSONSerialization、JsonKit)
- 数据的分页(后端数据多的话,就要分页返回)
- 数据压缩(大数据也可以压缩返回,减少流量,加快反应速度)
- 内容缓存(根据情况而定,是否需要缓存到本地,内存或者数据库)
- 算法的优化(核心算法的优化,例如有些app 有个 联系人姓名用汉语拼音的首字母排序)

3. 操作流畅度优化:

- Tableview 优化(tableview cell的加载优化)
- ViewController加载优化(不同view之间的跳转,可以提前准备好数据)

4. 服务器端和客户端的交互优化:

- 客户端尽量少的减少请求
- 服务器端尽量做多的逻辑处理
- 通信协议的优化(减小报文的大小)
- 电池的优化(尽量不要使用后台运行)

5. 可能造成tableView卡顿的原因有:

1.最常用的就是cell的重用, 注册重用标识符

如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell;

如果有很多数据的时候,就会堆积很多cell。

如果重用cell,为cell创建一个ID,每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell

2.避免cell的重新布局

cell的布局填充等操作 比较耗时,一般创建时就布局好

如可以将cell单独放到一个自定义类,初始化时就布局好

3.提前计算并缓存cell的属性及内容

当我们创建cell的数据源方法时,编译器并不是先创建cell 再定cell的高度

而是先根据内容一次确定每一个cell的高度,高度确定后,再创建要显示的cell,滚动时,每当cell进入凭虚都会计算高度,提前估算高度告诉编译器,编译器知道高度后,紧接着就会创建cell,这时再调用高度的具体计算方法,这样可以方式浪费时间去计算显示以外的cell

4.减少cell中控件的数量

尽量使cell得布局大致相同,不同风格的cell可以使用不用的重用标识符,初始化时添加控件,

不适用的可以先隐藏

5.不要使用ClearColor,无背景色,透明度也不要设置为0

渲染耗时比较长

6.使用局部更新

如果只是更新某组的话,使用reloadSection进行局部更新

7.加载网络数据,下载图片,使用异步加载,并缓存

8.少使用addView 给cell动态添加view

9.按需加载cell,cell滚动很快时,只加载范围内的cell

10.不要实现无用的代理方法,tableView只遵守两个协议

11.缓存行高:estimatedHeightForRow不能和HeightForRow里面的layoutIfNeed同时存在,这两者同时存在才会出现“窜动”的bug。所以我的建议是:只要是固定行高就写预估行高来减少行高调用次数提升性能。如果是动态行高就不要写预估方法了,用一个行高的缓存字典来减少代码的调用次数即可

12.不要做多余的绘制工作。在实现drawRect:的时候,它的rect参数就是需要绘制的区域,这个区域之外的不需要进行绘制。例如上例中,就可以用CGRectIntersectsRect、CGRectIntersection或CGRectContainsRect判断是否需要绘制image和text,然后再调用绘制方法。

13.预渲染图像。当新的图像出现时,仍然会有短暂的停顿现象。解决的办法就是在bitmap context里先将其画一遍,导出成UIImage对象,然后再绘制到屏幕;

14.使用正确的数据结构来存储数据。

相关文章

  • Vickate_积累及优化

    关于优化的建议: 1. 首页的启动速度 2. 页面浏览速度 3. 操作流畅度优化: 4. 服务器端和客户端的交互优...

  • 累及

    抱歉我不是你家人期待的样子 很抱歉我不很成熟 不能读懂你内心 抱歉偏偏把你拉上我这条注定不平坦的路 抱歉我想逃

  • 不累及他人

    两军对垒,成王败寇,乃天经地义的事。但是,若伤及无辜,则实属不该。 其实,我们身边有很多类似这样的事情。大至两个国...

  • Vickate_快排

    快排思想 如下的三步用于描述快排的流程: 在数组中随机取一个值作为标兵 对标兵左、右的区间进行划分(将比标兵大的数...

  • Vickate_冒泡排序

    冒泡排序 冒泡排序是最简单最容易理解的排序算法之一,其思想是通过无序区中相邻记录关键字间的比较和位置的交换,使关键...

  • MySQL性能优化第二弹!数据库结构的优化,梅花香自苦寒来

    前言 之前咱们更新MySQL优化查询的学习内容,今天我们继续来学习MySQL优化数据库结构。每天深入一小时,日积月...

  • 无一幸免

    打乱开始 推翻重来 消失以及消逝 都需要仪式感 秩序被否定或者认可 决定一种状态 状态累及生活 累及命运 共同体或...

  • 子无能累及父母苦

    子无能累及父母苦 文/邱阿丘 三十有五致太平,未曾屹立而一瘫。早已成家却无力养家,累带双亲与我一起受苦受罪。心有愧...

  • Vickate_插入排序

    冒泡排序 插入排序也是一个简单的排序算法,它的思想是,每次只处理一个元素,从后往前查找,找到该元素合适的插入位置,...

  • Vickate_关于UIApplication Delegate

    所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止。 在...

网友评论

      本文标题:Vickate_积累及优化

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