iOS和Mac开发 如何挖掘项目做性能优化点

特别鸣谢老大lunzi哥的分享。短短几分钟,感觉学到了很多!
这只是一篇方法论或者是个引子,性能优化具体操作,请参考另外一篇文章
各种性能优化方案

前言

项目代码在随着业务需求的不断迭代和数据量不断增加时,原有代码的逻辑处理方式在性能方面可能就跟不上要求了。要不就是处理时间过长,要不就是某些异常情况没有考虑,导致了一系列奇怪的问题。

性能优化,就是为了解决上述问题而想到的一个方案。我们可以分析性能可能发生异常的情况和借助一些工具,从而制定出对应的优化策略,让程序得以优化

性能瓶颈分类

具体的内容直接写出:

I/O开销

  • 网络I/O
  • 文件I/O
  • 内存I/O

计算

计算又可以分为

绘制/渲染

排版

具体细说

I/O相关

  • 网络

    这一方面,其实在客户端可做的不多,因为,我们如果正常的发送一个请求,更多的耗时操作或者瓶颈出现在server端,高并发,多线程,多表格查询,都有可能导致server响应速度增加。

    所以在通常情况下,网络我们暂时不去考虑(因为需要考虑性价比和提升结果,一切以结果为出发点)

  • 文件 和 内存

    • 内存

      在计算机中,我们默认内存的操作速度是很快的,虽然其可缓存的数据相对文件操作来说相当少,但也不影响其操作速度的快慢,所以,我们正常去操作内存IO,也不会太过影响性能

    • 文件

      在IO这部分,最大头的就是文件IO了。文件的读写,保存或者查找,都是IO操作里最花费时间。所以如果想要优化IO,从文件IO操作着手效益最高

      相关的例子说明:

      • 二进制重排
      • 多个framework的合并
      • 减少项目中文件数量

      都能提高相关的内容

计算

绘制/渲染

  • 缓存复用
  • 视图层级

最典型例子UITableView的tableviewcell缓存机制,其初衷就是为了防止过多的cell视图被创建,创建没有什么,就是分配一个内存地址,但是view上的内容绘制、渲染,在从创建到获得view对象之间,占比相对较大。

还有一个不太恰当的例子:离屏渲染。圆角触发离屏渲染终究还是因为layer层太多视图层级,导致需要一层层解析处理渲染,再统一合并渲染处理。

排版

解决方案:预排版

缓存cell高度就是最好的例子

最典型例子还是在UITableView的UITableViewDelegate方法heightForRowAtIndexPath。此方法在创建并滑动的时候,会被多次调用。如果,cell的高度每次都要通过计算获得,那将大大降低滑动效率。这也是为什么UITableView会增加一个预估高度的属性,虽然有时候觉得很鸡肋,且会影响页面显示(跳动什么的)。但也是为了减少应要排版而引发计算的消耗。

性能的具体体验

时间

启动时间也好,方法调用时间也好,视图滚动耗时时间也好,都与时间有关。所以通过时间来判断性能的好坏,是个不错的选择。

  • 前提

    前面所说,除网络IO操作外,这个的大头决定与server,客户端没有太多能力可以处理。所以时间计算时,需要剔除网络请求带来的影响

    如滑动操作,1000条数据要滑动展示,最好先将这1000条数据内容加载并缓存,然后剔除网络的影响来测量,就能较为准确的知道计算可能导致的时延问题。

  • 工具

    时间:instruments的time profiler就是很好的工具。

    FPS:很多第三方库可以选择的。

## 其它内容?

有些什么其他的耗电啊,内存泄漏啊,有些都是在特别明显再处理(耗电)或者是代码层面(规范编写)在处理或者避免的。所以不算太大的优化点。

当然也是需要的,只是在必要时再做,考虑投入产出比即可。

方案的制定

优化的大体方向已经有了,那具体优化细节点,该如何确定呢?

大体步骤:

  1. 现状是啥?
  2. 问题点有哪些?每个问题点的可能影响占比是多少?
  3. 针对占比大的问题,分析问题所属类型,使用对应类型解决办法尝试
  4. 优化前优化后结果对比,输出优化结果。确定优化成效
  5. 总结

最后还是感谢lunzi哥的分享内容!醍醐灌顶

一些大牛的总结

落影 -- 启动时间的一些分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355