測量,而不是猜測 效能調優 12 2

2022-03-18 08:36:48 字數 1336 閱讀 8210

於是現在你知道有哪些點可能會影響動畫效能,那該如何修復呢?好吧,其實不需要。有很多種詭計來優化動畫,但如果盲目使用的話,可能會造成更多效能上的問題,而不是修復。

如何正確的測量而不是猜測這點很重要。根據效能相關的知識寫出**不同於倉促的優化。前者很好,後者實際上就是在浪費時間。

那該如何測量呢?第一步就是確保在真實環境下測試你的程式。

當你開始做一些效能方面的工作時,一定要在真機上測試,而不是模擬器。模擬器雖然是加快開發效率的一把利器,但它不能提供準確的真機效能引數。

模擬器執行在你的mac上,然而mac上的cpu往往比ios裝置要快。相反,mac上的gpu和ios裝置的完全不一樣,模擬器不得已要在軟體層面(cpu)模擬裝置的gpu,這意味著gpu相關的操作在模擬器上執行的更慢,尤其是使用caeagllayer來寫一些opengl的**時候。

這就是說在模擬器上的測試出的效能會高度失真。如果動畫在模擬器上執行流暢,可能在真機上十分糟糕。如果在模擬器上執行的很卡,也可能在真機上很平滑。你無法確定。

另一件重要的事情就是效能測試一定要用發布配置,而不是除錯模式。因為當用發布環境打包的時候,編譯器會引入一系列提高效能的優化,例如去掉除錯符號或者移除並重新組織**。你也可以自己做到這些,例如在發布環境禁用nslog語句。你只關心發布效能,那才是你需要測試的點。

最後,最好在你支援的裝置中效能最差的裝置上測試:如果基於ios6開發,這意味著最好在iphone 3gs或者ipad2上測試。如果可能的話,測試不同的裝置和ios版本,因為蘋果在不同的ios版本和裝置中做了一些改變,這也可能影響到一些效能。例如ipad3明顯要在動畫渲染上比ipad2慢很多,因為渲染4倍多的畫素點(為了支援視網膜顯示)。

為了做到動畫的平滑,你需要以60fps(幀每秒)的速度執行,以同步螢幕重新整理速率。通過基於nstimer或者cadisplaylink的動畫你可以降低到30fps,而且效果還不錯,但是沒辦法通過core animation做到這點。如果不保持60fps的速率,就可能隨機丟幀,影響到體驗。

你可以在使用的過程中明顯感到有沒有丟幀,但沒辦法通過肉眼來得到具體的資料,也沒法知道你的做法有沒有真的提高效能。你需要的是一系列精確的資料。

你可以在程式中用cadisplaylink來測量幀率(就像11章「基於定時器的動畫」中那樣),然後在螢幕上顯示出來,但應用內的fps顯示並不能夠完全真實測量出core animation效能,因為它僅僅測出應用內的幀率。我們知道很多動畫都在應用之外發生(在渲染伺服器程序中處理),但同時應用內fps計數的確可以對某些效能問題提供參考,一旦找出乙個問題的地方,你就需要得到更多精確詳細的資料來定位到問題所在。蘋果提供了乙個強大的instruments工具集來幫我們做到這些。

調優 Nginx效能調優

一.nginx優化配置 1.主配置檔案優化 注 部分配置詳解 worker processes 8 nginx程序數,建議按照cpu數目來指定,一般為它的倍數。worker cpu affinity 00000001 00000010 00000100 00001000 00010000 00100...

Spark效能調優 JVM調優

通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...

七 Spark效能調優 Shuffle 調優

目錄 一 調節 map 端緩衝區大小 二 調節 reduce 端拉取資料緩衝區大小 三 調節 reduce 端拉取資料重試次數 四 調節 reduce 端拉取資料等待間隔 五 調節 sortshuffle 排序操作閾值 val conf new sparkconf set spark.shuffle...