当我们在讲性能优化时,我们到底在讲什么?
性能的定义
最近笔者在学习 iOS 开发时了解到性能优化的相关知识,在一些博客、书籍中,他们直接给出了比如
复用cell
缓存cell
缓存高度
减少subview的数量,使用drawrect绘制,这样可以利用GPU离屏渲染
避免图形特效,图片缩放颜色渐变等。
设置不透明
不要阻塞主线程,将处理放到子线程中去处理设置最大线程数为2,利用NSOperationQueue的maxConcurrentOperationCount为2
这样的 Tips,这没有错误,但对于性能优化的定义不太清楚。
笔者对后端中性能优化的定义是吞吐量+响应时间,显然在 iOS 开发或者说客户端、前端开发中,不是这个样子
官方描述
暂未找到,可以去前端框架、iOS官方文档中找,服务端似乎语言manual本身并未提及
不同领域的关注点
猜一下:前端关注响应时间、流畅度,后端同时关注吞吐量和响应时间(但因为网络这个木桶的短板,在并发量不够高的情况下去做优化并没有什么意义——和“不存在任何在异步、弱网的情况下可以保证一致性的算法”这一论点一个道理)——这也是不要提早性能优化的一个论据——你不知道短板在哪。
在什么时候做这件事?
在一些高屋建瓴的传世经典中,作者会反复强调不要在软件开发的过程中做性能优化,而是等到软件开发完之后,做基准测试有问题时,再返回代码去做优化,这个建议的目的很明确,就是为了可读性、可维护性,但真的有必要实际开发真的如此吗?
正如《编译原理》的唯一目的是通过让你明白现代编译器的复杂性和 Opt 来制止你花费额外时间去写出自以为编译器友好实际上没有卵用Output 别无二致的代码,性能优化这件事除了在 Interview 的时候测试你的知识深度,并不能真的在开发的时候通过一些根本就不确定的条件来写出更高效的代码————一样的道理,我们处于程序运行体系的最上层,依靠系统库和GPL去做事。
Reference
- 《性能之巅》
- iOS性能优化