1. 程式人生 > >使用instrument進行效能優化

使用instrument進行效能優化

在開始進行應用程式效能分析的時候,一定要使用真機,模擬器執行在Mac上,然而Mac上的CPU往往比iOS裝置要快。相反,Mac上的GPU和iOS裝置的完全不一樣,模擬器不得已要在軟體層面(CPU)模擬裝置的GPU,這意味著GPU相關的操作在模擬器上執行的更慢,尤其是使用CAEAGLLayer來寫一些OpenGL的程式碼時候. 這就導致模擬器效能資料和使用者真機使用效能資料相去甚運.

2.另外在開始效能分析前另外一件重要的事情是,應用程式執行一定要釋出配置 而不是除錯配置.

在釋出環境打包的時候,編譯器會引入一系列提高效能的優化,例如去掉除錯符號或者移除並重新組織程式碼.另iOS引入一種"Watch Dog"[看門狗]機制.不同的場景下,“看門狗”會監測應用的效能。如果超出了該場景所規定的執行時間,“看門狗”就會強制終結這個應用的程序.開發者可以crashlog看到對應的日誌.但Xcode在除錯配置下會禁用"Watch Dog".

注意手機或模擬器上要有執行過的app: 

    Xcode–> Product–> Profile (command + i 快捷鍵)調出instrument,選擇Time Profiler,我們可以跟蹤哪個方法最耗時間,以此來優化

這裡寫圖片描述

使用Time Profiler的效能分析方法

Time Profiler分析原理:它按照固定的時間間隔來跟蹤每一個執行緒的堆疊資訊,通過統計比較時間間隔之間的堆疊狀態,來推算某個方法執行了多久,並獲得一個近似值。其實從根本上來說與我們的原始分析方法異曲同工,只不過其將各個方法消耗的時間統計起來。

和使用 Instruments的其他工具一樣,點選XCode的Product選單Profile啟動Instruments  然後選擇TimeProfiler

首先,確保右手邊工具欄上的檢視選擇器的每一個選項都被選中,如下:

Screen-Shot-2015-03-21-at-00.14.53.png

這樣就確保所有的面板都被開啟。現在看一下下面的截圖和每一部分的說明。

Pasted_Image_21_03_2015_00_17-451x320.png

1、這裡控制記錄過程,點選紅色的"記錄"按鈕可以停止或開始當前正在分析的app(在記錄和停止按鈕之間切換),暫停鍵,如你所想,暫停當前正在執行的app。

2、這裡是執行計時器(run timer),計時器記錄著正在分析的app執行了多長時間、執行了多少次。如果你使用記錄控制按鈕來停止你的app,然後重啟,這將建立一個新的執行記錄,同時會顯示"Run 2 of 2"。

3、這裡被稱作路徑(track),就你選擇的Time Profiler工具而言,因為只有一個工具,所以這裡只有一條路徑,關於這裡顯示的圖示的詳情,一會你就會在接下來的教程中瞭解更多。

4、這裡是詳情面板,展示的是你正在使用的工具的主要資訊。就現在而言,這裡展示的是最"笨重(hottest)"的方法--換句話說,佔用CPU時間最長的方法。點選上方的bar會看到Call Tree(左手邊的那個)並選中Sample List,然後你會看到資料的不同檢視。檢視展示了每一個示例。點選其中幾個,你會在Extended Detail inspector中看到被捕獲的堆疊跟蹤。

5、這裡是檢查器(inspector)面板,一共有三個檢查器:record setting(記錄設定),display setting(展示設定),還有extends detail(擴充套件詳情)。

從詳情面板Call Tree與相關內容擴充套件詳情面板對應的關係圖:

QQ截圖20160804182955.png

詳情面板更多的資訊選項

QQ截圖20160804183001.png

樣本列表(Sample List)

QQ截圖20160804183008.png

Timestamp:取樣的開始時間

Dep:堆疊深度

CPU:執行緒執行在那一個CPU上

Process:程序名稱

Thread:所在的執行緒名稱

Hot Frame:取樣中呼叫最多的函式

Responsible Library:呼叫該函式的庫

Responsible Caller:呼叫該函式的函式

四.使用技巧

1.圖示為黑色頭像的就是Time Profiler給我們的提示,有可能存在效能瓶頸的地方

2.按著option鍵在主介面6中通過拖動滑鼠來選擇需要過濾的時間段

3.Command+F查詢過濾的函式名或者類名

4.關聯程式碼

QQ截圖20160804183106.png


下面我們來開始分析原因,這是應用第一次進入首頁的詳情面板:


好嘛,佔整個首頁載入時間的13% 而且確實也是商城問題導致的,這一塊是解壓縮檔案用的,是個耗時的操作,不知有沒有放在後臺執行緒裡操作,這裡只是一個具體的方法,我們看看都有誰呼叫了它,點選那一行的左箭頭就可以展開檢視所有呼叫者:


展開後看一下最後三行,它在首頁的 viewdidLoad 方法中在初始化首頁底部時,載入商城資料時,呼叫的解壓縮操作,雙擊可以

檢視具體程式碼實現,我們選中雙擊[Mall initMallConfig:]進去後看一下


這是一個拷貝資源的方法,我們跟進去看一下:


並沒有發現任何開啟子執行緒的操作,那麼這個方法也就是在首頁  viewdidload 方法裡面呼叫的,代表就是在UI執行緒進行的檔案copy

毋庸置疑,肯定會導致頁面卡頓。

那我們把它放到子執行緒進行操作看看效果:



耗時的資源壓縮複製放到後臺執行 首頁載入從851ms降到了 70ms ,載入速度顯著提升.

總結:效能優化是在所有更能實現完成時要做的事,使用Time Profile工具分析app每個流程的執行情況,發現耗時的地方,合理優化,提升使用者體驗,切記,優化後要做一遍詳細的測試,要不然別修了東牆壞了西牆。

相關推薦

使用instrument進行效能優化

在開始進行應用程式效能分析的時候,一定要使用真機,模擬器執行在Mac上,然而Mac上的CPU往往比iOS裝置要快。相反,Mac上的GPU和iOS裝置的完全不一樣,模擬器不得已要在軟體層面(CPU)模擬裝置的GPU,這意味著GPU相關的操作在模擬器上執行的更慢,尤其是使用

SQL Server 效能優化實戰系列(一) SQL Server擴充套件函式的基本概念 使用SQL Server 擴充套件函式進行效能優化 SQL Server Url正則表示式 記憶體常駐 完美解決方案

資料庫伺服器主要用於儲存、查詢、檢索企業內部的資訊,因此需要搭配專用的資料庫系統,對伺服器的相容性、可靠性和穩定性等方面都有很高的要求。        下面是進行籠統的技術點說明,為的是讓大家有一個整體的概念,如果想深入可以逐個擊破;&n

從x86流水線層面,談談如何進行效能優化

前言 效能優化,關鍵在於伺候好 CPU。作為一個追求效能極致的程式設計師,瞭解 CPU 的內部機制是一個不可迴避的話題。這是一個需要日積月累的持續的過程,但也並不需要深入到數位電路的程度,就像一個設計 CPU 的專家並不一定精通軟體設計一樣,你也並不需要成為一個 CPU 專家才能寫出高效能的軟體。

IPhone開發工具篇-利用xcode profile和analyze進行效能優化

記憶體洩漏問題的解決 記憶體洩漏(Memory Leaks)是當一個物件或變數在使用完成後沒有釋放掉,這個物件一直佔有著這塊記憶體,直到應用停止。如果這種物件過多記憶體就會耗盡,其它的應用就無法執行。這個問題在C++、C和Objective-C的MRR中是比較普遍的問題。 在Objective-C中釋

如何對WEB前後端進行效能優化?

網站效能優化是一個很綜合的話題,涉及到伺服器的配置和網站前後端程式等各個方面,我只是從實際經歷出發,分享一下自己所嘗試過的網站效能優化方法。之所以在標題上掛一個web2.0,是因為本文更偏重於中小網站的效能優化,我所使用的系統也是典型web2.0的LAMP架構。首先講講

基於live555實現的RTSPServer對底層進行效能優化的方法

在部落格《EasyIPCamera高效能攝像機RTSP伺服器RTSPServer解決方案》我介紹了基於live555實現的一套RTSPServer功能元件,當時開發者經過幾個月的除錯,已經將底層的效能除錯到了一個業界非常優秀的程度,主要優化的幾點: 傳送優化

伺服器小白的我,是如何成功將 node+mongodb 專案部署在伺服器上並進行效能優化

前言 本文講解的是:做為前端開發人員,對伺服器的瞭解還是小白的我,是如何一步步將 node+mongodb 專案部署在阿里雲 centos 7.3 的伺服器上,並進行效能優化,達到頁面 1 秒內看到 loading ,3 秒內看到首屏內容的。 搭建的專案是採用了主

伺服器小白的我,是如何將 node+mongodb 專案部署在伺服器上並進行效能優化

前言 本文講解的是:做為前端開發人員,對伺服器的瞭解還是小白的我,是如何一步步將 node+mongodb 專案部署在阿里雲 centos 7.3 的伺服器上,並進行效能優化,達到頁面 1 秒內看到 loading ,3 秒內看到首屏內容的。 搭建的專案是採用了主流的前後端分離思想的,這裡只講 伺服器環境

當面試官問你:如何進行效能優化

問題背景 在開發好頁面後,如何讓頁面更快更好的執行,是區分一個程式猿技術水平和視野的一個重要指標。所以面試時,面試官總會問你一個問題,如何進行效能優化呢? 效能優化是什麼 從前端的角度來說,效能優化可以分為兩個方向。從使用者角度來看,一個是頁面載入的很快,另一個是頁面使用起來很流暢。因此,對效能優化的探索,我

mysql查詢太慢,我們如何進行效能優化

老劉是即將找工作的研究生,自學大資料開發,一路走來,感慨頗深,網上大資料的資料良莠不齊,於是想寫一份詳細的大資料開發指南。這份指南把大資料的【基礎知識】【框架分析】【原始碼理解】都用自己的話描述出來,讓夥伴自學從此不求人。 您的點贊是我持續更新的動力,禁止白嫖,看了就要有收穫,一起加油。 今天給大家分

淺談前端效能優化(二)——對HTTP傳輸進行壓縮

1、前端效能優化的一點: 對js、css、圖片等進行壓縮,儘可能減小檔案的大小,減少檔案下載的時間,從而減少網頁響應的時間。   2、前端效能優化的另一點: 對HTTP傳輸進行壓縮,即在js,css、圖片等資源已經壓縮的基礎上(其實,檔案的壓縮與否均可,檔案的壓縮跟HTTP傳輸過程的壓縮沒關

如何進行web前端效能優化

這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【如何進行web前端效能優化】   大家好,我是IT修真院深圳分院第9期的學員

如何進行網站效能優化

這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【如何進行網站效能優化?    】   目錄 &nbs

如何進行網站效能優化

目錄 1.背景介紹 2.知識剖析 3.常見問題 4.解決方案 5.編碼實戰 6.擴充套件思考 7.參考文獻 8.更多討論 1.背景介紹 網站的訪問量及使用者的永續性其實在一定程度上取決於其效能,如果一個網站響應耗時久,動畫卡頓,佔用大量的cpu等,往

怎麼進行MongoDB效能優化

資料庫效能對軟體整體效能的影響是不言而喻的,那麼,當我們使用MongoDB時改如何提高資料庫效能呢? 1.正規化化與反正規化化 在專案設計階段,明確集合的用途是對效能調優非常重要的一步。 從效能優化的角度來看,集合的設計我們需要考慮的是集合中資料的常用操作,例

如何進行SQL效能優化

在SQL查詢中,為了提高查詢的效率,我們常常採取一些措施對查詢語句進行SQL效能優化。本文我們總結了一些優化措施,接下來我們就一一介紹。 1.查詢的模糊匹配 儘量避免在一個複雜查詢裡面使用 LIKE '%parm1%'—— 紅色標識位置的百分號會導致相關列的索引無法使用,最

Loadrunner 呼叫 Webservice 介面 進行 效能測試 時的方法及優化總結

1.Webservice                       協議指令碼編寫流程 下面介紹使用 Loadrunner 呼叫 Webservice 介面 通用的流程與方法。 1.1 新建指令碼,選擇 "Webservice" 協議 1.2 選擇 Manag

Andorid效能優化(一) 之 如何給應用進行記憶體優化

1 前言 Android系統為每個應用程序都分配一個有封頂的堆記憶體值,當應用記憶體佔用過高到沒有足夠的記憶體來提供給新物件分配並且垃圾回收機制也已經沒有空間可回收時就會OOM。當一個應用記憶體佔用過高會使一些效能差的手機系統記憶體緊缺,使得整體系統卡頓。而且應用記憶體佔用過高後,一旦退到後

進行前端效能優化幾種常用的方法。

程式碼層面:避免使用css表示式,避免使用高階選擇器,通配選擇器。 快取利用:快取Ajax,使用CDN,使用外部js和css檔案以便快取,新增Expires頭,服務端配置Etag,減少DNS查詢等 請求數量:合併樣式和指令碼,使用css圖片精靈,初始首屏之外的圖片資源

Android進階——效能優化之儘量多使用AsyncTask進行短時間網路通訊

引言 對於我們Android 開發來說,網路操作應該是最普遍不過的操作了吧,因為沒有網路操作的APP應該就沒有存在的價值吧,往往網路操作這部分又通常是耗時的,所以為了良好的使用者體驗,我們必須把耗時操作放到非UI執行緒,而實現方式有很多種,比較常見的應該就是H