玩游戏的童鞋肯定会知道FPS,这里要说的不是First-person shooting game), 而是 FPS (Frames Per Second)每秒传输帧数,目前主流的手机屏幕刷新帧数为60fps,iPhone 也是。
屏幕的fps 越高,显示效果就越流畅,对硬件GPU的要求也就越高。
目前主流的硬件已经可以在4K显示器上流畅的跑60fps了,手机也不例外,以黑科技著称的大法 Xperia Z5 已经证明了一切。但是在iPhone 的分辨率一直维持在1080P 以内,可能也是考虑到手机应用的软件与硬件的平衡,持相对保守的态度,所以iOS 开发者相对于其他移动开发者也能更容易的开发出流畅的应用。但是,如果在开发的过程中没有合理的使用API,或者程序的漏洞,也会导致应用的卡顿,下面我们通过一行代码即可监控应用的FPS。
Cocoapods:
pod 'XFPS'
使用:
XFPS.shared.enable = true
Demo 可以在这里下载到。
实现
实现非常简单,这里主要通过 CADisplayLink 与RunLoop 结合使用来进行卡顿监控,通过前后帧的时间差,计算出丢失的帧,通过硬件的60fps 减去丢失的帧 得到当前帧数。
我们知道产生卡顿的原因有很多,过多的透明、圆角、高度计算。
在Demo 中,通过Core Graphics对cell 中的图片不停的绘制 压榨GPU 制造明显卡顿,来使帧数下降。
因为有时候轻微的卡顿并不是每个人都能感觉出来的,这个小工具仅仅是用来方便快速的检测App的流畅性,还有更详细更专业的性能检测还是需要用 Instuments 来做,能够实时查看到 CPU 和GPU 的信息,并可以看到所有与显示相关的数据,能更精确地定位到界面卡顿的问题。
Premature optimization is the root of all evil. - Donald Knut