第9章 优化
本章会学习能够提高iOS设备的OpenGL ES 2.0渲染性能的优化策略。在9.1 节介 绍的第一个技术通常最有效。接下来的每个技术的效果会越来越小,但是在某些情况 下,使用与不使用它们仍然可能会有‘ 足够快”和“ 太慢”的巨大差别。
对于嵌人式设备来说,优化不仅仅是指优化渲染的速度。例如,用户可能宁愿只要 30Hz的刷新率而延长电池的使用时间,也不要60Hz的刷新率而导致设备电池快速耗 尽。为每个应用考虑一个合理的平衡。最重要的是不要渲染对用户没用的任何东西。没 有必要重新渲染一个没有变化的场景。也没有必要在iOs设备上让渲染速度超过60Hz, 因为用户永远看不到这些额外的更新。
在优化之前,请考虑一下这个优化是否真的有必要。有很多不优化的理由:
- 优化一个应用常常带来新的错误。
- 优化一个应用的代码常常让这些代码难以阅读和维护。
- 可能花了大量的时间来优化代码,但是却获得了很少的性能提升。
即使存在优化软件的机会,明智的程序员也会保持谨慎。正如算法分析之父 Donald Knuth在1974年所写的:
我们应该忽视那些小的性能提升机会,大约97%的情况下:过早优化都是一切不 幸的根源。但我们不应该放弃在剩下的关键的3%的情况中的性能提升机会。一个好的 程序员不会因为这样的理由而放任不管,他还是会明智地仔细查看关键代码,但只会在 这个代码巳经被验证后。
对于Knuth的忠告,那3%的性能关键代码可能在OpenGLES库中、驱动中,或 者其他超出你的控制范围的地方。很多应用天生受限于输人/输出(I/O) 速度或者其他 的无法通过修改源代码来改善的因素。类似的,代码执行速度的变化对于受限于GPU 的应用是没用的。当瓶颈不在你的代码中时,最好的方式是避免瓶颈:减少I/O、渲染 更少的几何对象,或者减少内存访问。