-
iOS App Optimization series 5 卡顿优化
0X01理论卡顿原理:目前主流移动设备均采用双缓存+垂直同步的显示技术。大概原理是显示系统有两个缓冲区,GPU会预先渲染好一帧放入一个缓冲区内,让视频控制器读取,当下一帧渲染好后,GPU会直接将视频控制器的指针指向第二个容器。这里,GPU会等待显示器的VSync(即垂直同步)信号发出后,才进行新的一帧渲染和缓冲区更新。大多数手机的屏幕刷新频率是60HZ,如果在 1000⁄60=16.67ms 内没有将这一帧的任务执行完毕,就会发生丢帧现象,这便是用户感受到卡顿的原因。这一帧的绘制任务包括C...…
-
iOS CodeReview
代码质量是每个技术团队都很重视的一点,但是人员变动,开发人员水平层次不齐,需求细节不完善,开发周期紧张等等一系列问题都可能拉低代码质量,给我们的APP带来很多风险。CodeReview就是提高代码质量的手段之一。这周参与了3次不同模块的CodeReivew,趁热总结一次完善的CodeReview要经过哪些流程。准备 会议室预定+时间确定。安静的环境, 没有特别紧急的事情要处理的时间才适合CodeReview不然关键人员一会会就出去了很打断流程。 人员邀请。确定被Review人 和 需要...…
-
APM设想
起因 为什么会考虑到想自研APM呢?对于我们软件的开发流程中我发现大家都聚焦于代码的质量,需求的准确性和稳定性,很容易忽视关于性能方便的要求。当然在硬件条件越来越好的时代,我们还有必要关注性能嘛?答案是当然的:有必要 而且很有必要。现在一个App的业务繁多,一个超级App可能大大小小可以供用户使用的需求能达到上千个,常用的页面涉及到几十个。如果每个需求哪怕只有一点的性能浪费积累起来就会给用户产生一定的影响。代码质量我们可以CodeReview、 静态检测,需求的准确性和稳定性我们可以通过...…
-
iOS App Optimization series 4 耗时统计
对于耗时统计作用最有价值的莫过于以下几点 启动时间优化关于启动时间优化之前有文章分析过,如果没有心情细看可以直接使用最终方案。起点时间+ (BOOL)processInfoForPID:(int)pid procInfo:(struct kinfo_proc*)procInfo{ int cmd[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; size_t size = sizeof(*procInfo); return ...…
-
iOS 跨平台方案看法
随着移动开发的发展,以及在中国有特色的环境下.近阶段对于跨平台的方案有一种越来越流行的趋势,因为不论从人力成本还是更新频率上线速度来看 跨平台方案都有一定的优势。 现在主流的跨平台方案分别是 H5 ReactNative Flutter。那么我就从这三个主流方案说一说自己的理解和看法。H5H5作为存在时间最久的跨平台方案目前也是各大公司作为跨平台方案的首选。但是由于其有一定的性能问题以及和原生体验上的差异让各大公司都在另寻出路。但是作为最为稳定的跨平台方案绝对当仁不让。毕竟时间久积累的各种...…
-
iOS 代码质量随想
借着今天公司有分享设计模式 简单记录下自己对“高”质量代码和设计模式的理解。众所周知设计模式有六大核心的思想原则。引用一段百度百科的介绍 传送门为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?面向对象有几个原则:单一职责原则 (Single Responsiblity Principle SRP)开闭原则(Open Closed Principle,OCP)、里氏代换原则(Liskov Substitution Princip...…
-
iOS App Optimization series 3 内存/CPU优化
生在ARC时代我们是幸运的,还记得初期学习OC 就是在iOS5,那个时候还是MRC时代,又是初学,分不清内存怎么管理,各种崩溃各种酸爽。后面引入ARC机制后,对开发者总算友好了很多,但是不注意还是会引起内存问题。实际情况下解决稳定增长的内存问题并不难(毕竟能够复现),难就难在开发并不知道自己开发的功能发生了内存问题,那么我们就需要借助一些工具提醒我们项目里的内存问题。下面我们从3个优化方向来总结一下 (配合自制demo食用更佳)减少内存泄露定位问题1.引起 内存泄露的点 循环引用 ns...…
-
iOS RunLoop
前言: 2019年的第一篇博客 。如果说每年的都有一个主题,那么我对自己2019年的要求就是夯实基础。之前很多概念要么很早就了解过,要么知识已经更新迭代。所以导致很多知识不用已经遗忘或者就是当时根本也理解的不够透彻。借着培养写博客的习惯梳理一遍自己的知识点,夯实一下自己的基础。 其实RunLoop的知识也不是新鲜知识,很多很好的博客从2015年就从源码层次去分析过了,自己之前对RunLoop的理解也是一些很浅的概念。这次就不从原理讲解了,从文末的资料就可以看到大部分很高质量的博客。我认...…
-
iOS App Optimization series 2 启动时间优化
关于启动时间优化网上已经有很多相关资料,但大多数都在翻译和解释WWDC 2016/406 和 2017/413 的内容。苹果爸爸说的当然很对,但是看完可能还是找不到具体的解决方法。所以这里作者从自己实践的角度出发叙述下我从哪些方面进行操作了。当然了,没看过WWDC 这两个session的可以从参考链接进入先看一下概念。贴心的我还准备了demo给大家边运行边看博客~带着问题思考 怎么统计我家app的启动时间? 怎么定位出有问题代码进行针对的优化处理? 异步线程操作会不会影响启动时间...…
-
iOS App Optimization series 1 体积优化
17年公司有任务要求减少安装包体积,本文为了记录自己优化App,给安装包做瘦身的时候总结的一些思路,方法和脚本。大家可以在这里找到本文用到的一些脚本,我先上一张我解决问题思路的脑图,可以先看也可以回头过来看。有个简单的概念就好。检测自己的App的表现知己知彼才能百战不殆。谁家公司还没有个竞品分析的对手呢?首先要知道自己与知名App或者竞争对手App的一个差距才能知道自己在哪方面做的不足。以蚂蚁财富为例:没有后缀的大部分就是二进制文件,占比有百分之82多。可以对比下数据看看自己的App的体积...…