精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

360移動端性能監控實踐QDAS-APM(iOS篇)

開發 開發工具
360作為一家注重用戶體驗的公司,app的性能問題無疑是被重點關注的,我們也總結出了一套自己的app性能監控體系。本文介紹360在iOS端移動端線上性能監控方案——QDAS-APM。

一、背景

app的性能問題是影響用戶體驗的重要因素之一。性能問題主要包含:崩潰、網絡請求錯誤或者超時、UI響應速度慢、主線程卡頓、CPU和內存使用高、耗電量大等等。大多問題的原因在于開發者錯誤地使用了線程、鎖、系統函數、編程規范問題、數據結構等等。解決這個問題的關鍵在于盡早發現和定位問題。

360作為一家注重用戶體驗的公司,app的性能問題無疑是被重點關注的,我們也總結出了一套自己的app性能監控體系。在平時開發和用戶反饋的問題中,我們對性能問題進行了歸納,總結出了5個分別是:資源文件如何掌控、 版本質量如何保證、線上問題如何排查、開發階段如何防止性能衰減、性能監控是否能真實反映用戶體驗。同時學習了業內相對完善的性能監控平臺上的功能原理。從而得出了360在iOS端移動端線上性能監控方案——QDAS-APM。

二、功能和原理

QDAS-APM已經實現以下功能監控:

  • 頁面渲染時長
  • 主線程卡頓
  • 網絡錯誤
  • FPS
  • 大文件存儲
  • CPU
  • 內存使用
  • Crash
  • 啟動時長

下面按照功能詳細介紹實現細節和原理。另外用戶在使用app時會感知性能問題,我們可以將其轉化為具體的性能監控指標。

1. 頁面渲染時長

什么是頁面渲染時長?頁面渲染時長其實是從頁面初始化到用戶能看到頁面效果的時間長度。所要了解的指標有:

  • 生命周期系統方法執行時長
  • 頁面類名
  • 啟動類型
  • 執行耗時
  • 插件名稱

關鍵度量的指標是執行耗時,不同的方法和步驟產生的耗時在用戶能接受的范圍內才被認為是合理。其他指標則是起有關聯性作用和定位問題。直接hook UIViewController的方法明顯是不可行的,原因是它只作用在UIViewController的方法,而app中大部分都采用繼承UIViewController的方式。

這里列出兩個可行性方案:

  • 采用KVO,我們知道對于任意對象進行KVO操作時,系統都會幫你動態的創建一個復制類,同時實現了setter getter函數的覆蓋和函數實現。
  • 采用runtime遍歷所有類為UIViewController的子類,再進行動態替換。

這兩種方式更加推薦***種,出于對兼容性、性能、以及能夠直接獲取UIViewController的子類的IMP。那具體如何實現呢?總結歸納為三步驟:

  • 需要創建一個UIViewController的類別,對UIViewController的實例進行KVO,目的是讓KVO創建需要監控UIViewController的子類。
  • 添加需要監控的方法,在KVO創建出來的子類添加需要Swizzle的方法對應的SEL及其IMP。目的是控制調用原來類的方法時機。
  • 在UIViewController的實例銷毀時,在dealloc方法里將KVO監聽移除,不然會導致Crash。

舉個例子:我們以監控到qh_viewDidLoad方法舉例:

  1. static void qh_viewDidLoad(UIViewController *kvo_self, SEL _sel) 
  2.     Class kvo_cls = object_getClass(kvo_self); 
  3.     Class origin_cls = class_getSuperclass(kvo_cls); 
  4.  
  5.     // 注意點 
  6.     IMP origin_imp = method_getImplementation(class_getInstanceMethod(origin_cls, _sel)); 
  7.  
  8.     void(*func)(UIViewController *, SEL) =  (void(*)(UIViewController *, SEL))origin_imp; 
  9.  
  10.         CFAbsoluteTime startTime = CACurrentMediaTime(); 
  11.         func(kvo_self, _sel); 
  12.         CFAbsoluteTime endTime = CACurrentMediaTime(); 
  13.         NSTimeInterval duration = (endTime - startTime)*1000; 
  14.  
  15.     NSLog(@"Class %@ cost %g in viewDidLoad", [kvo_self class], duration); 

會有一種特殊情況,如果KVO生成的類中對應的類原本沒有實現監控方法,那么會造成什么后果呢?KVO內部生成的NSKVONotifying_ViewController實際上時繼承自ViewController,因此直接取出對應的IMP調用。

OK,上面說的是對UIViewController類方法的執行時長統計。我們還想知道用戶真正頁面跳轉后看到***針頁面圖像的時長要如何采集呢?

那是不是將UIViewController類的init+loadView+viewDidLoad+viewWillAppear+viewDidAppear方法執行時長之和就是頁面渲染時長了呢?

答案是否定的,下面舉了三個反面例子:

如何才能判斷屏幕渲染完成?是否能間接獲取屏幕渲染時長?

對于異步回調和異步渲染這兩種方式,用上面提到的5個方法執行時長之和是不適用的。接下來看下如何相對準確地來統計和計算的方案。

頁面渲染的時長和頁面的布局時長會在未來的某個時間點上達到一致。要想得到頁面渲染的時長可以間接地參考頁面的布局完成時長。在UIViewController的生命周期方法里有一個方法叫viewDidLayoutSubviews,它是干什么的呢?它其實是告訴了控制器的subviews布局完成的時間點。一般情況下會被調用兩次,在不同的操作系統版本里調用次數也不同。

2. 主線程卡頓分析

主線程的卡頓直接影響用戶使用體驗,其表現在頁面的操作流暢性影響。首先引入一個概念FPS(Frames Per Second):每秒顯示連續圖片的幀數。每秒幀數越多,UI操作就越流暢。一般應用保持在每秒50~60幀數,會給用戶帶來流暢的感覺,反之,用戶則會感知到卡頓。那為什么會出現主線程卡頓呢?首先了解下,每一幀圖像顯示到屏幕的原理。

這是觸屏幕顯示的原理流程圖。CPU負責計算顯示內容,包括視圖的創建、布局計算、圖片解碼、文本繪制等,cpu會把計算后的結果提交給GPU,GPU進行變換、合成、渲染后,將渲染結果提交到幀緩沖區,當下一次垂直同步信號到來時,視頻控制器從緩沖區里獲取視圖顯示到屏幕上。明白了就屏幕顯示的原理,接下來看下為甚么會產生卡頓。

圖上提到 V-Sync 是什么,以及為什么要在 iPhone 的顯示流程引入它呢?在 iPhone 中使用的是雙緩沖機制,即上圖中的 FrameBuffer 有兩個緩沖區,雙緩沖區的引入是為了提升顯示效率,但是與此同時,他引入了一個新的問題,當視頻控制器還未讀取完成時,比如屏幕內容剛顯示一半時,GPU 將新的一幀內容提交到幀緩沖區并把兩個緩沖區進行交換后,視頻控制器就會把新的一幀數據的下半段顯示到屏幕上,造成畫面撕裂現象,V-Sync 就是為了解決畫面撕裂問題,開啟 V-Sync 后,GPU 會在顯示器發出 V-Sync 信號后,去進行新幀的渲染和緩沖區的更新。

搞清楚了 iPhone 的屏幕顯示原理后,下面來看看在 iPhone 上為什么會出現卡頓現象,上文已經提及在圖像真正在屏幕顯示之前,CPU 和 GPU 需要完成自身的任務,而如果他們完成的時間錯過了下一次 V-Sync 的到來(通常是1000/60=16.67ms),這樣就會出現顯示屏還是之前幀的內容,這就是界面卡頓的原因。不難發現,無論是 CPU 還是 GPU 引起錯過 V-Sync 信號,都會造成界面卡頓。

3. 網絡監控

網絡監控一般通過 NSURLProtocol 和代碼注入(Hook)這兩種方式來實現,由于 NSURLProtocol 作為上層接口,使用起來更為方便,NSURLProtocol 屬于 URL Loading System 體系中,應用層的協議支持有限,只支持 FTP,HTTP,HTTPS 等幾個應用層協議,對于使用其他協議的流量則束手無策,所以存在一定的局限性。監控底層網絡庫 CFNetwork 則沒有這個限制。如果本地有https的證書驗證也不適用于NSURLProtocol這種方式。容易引起業務數據丟失問題。

(1) NSURLProtocol

上圖是基于NSURLProtocol協議來實現的,通過繼承自NSURLProtocol,并注冊。通過代理和自身方法來得到網絡請求相關的指標。

(2) HOOK方式—NSProxy

NSProxy is an abstract superclass defining an API for objects

that act as stand-ins for other objects or for objects that don’t exist yet.

Typically, a message to a proxy is forwarded to the real object or causes the proxy to load (or

transform itself into) the real object. Subclasses of NSProxy can be used to implement transparent

distributed messaging (for example, NSDistantObject) or for lazy instantiation of objects that are expensive to create.

上面的這段英文是 Apple 官方文檔給 NSProxy 的定義,NSProxy 和 NSObject 一樣都是根類,它是一個抽象類,可以通過繼承它,并重寫 -forwardInvocation: 和 -methodSignatureForSelector: 方法以實現消息轉發到另一個實例。綜上,NSProxy 的目的就是負責將消息轉發到真正的 target 的代理類。

那為什么我們不用Method swizzling 替換方法需要指定類名?是因為 NSURLConnectionDelegate 和 NSURLSessionDelegate 是由業務方指定,通常來說是不確定,所以這種場景不適合使用 Method swizzling。使用 NSProxy 可以解決,具體實現:proxy delegate 替換 NSURLConnection 和 NSURLSession 原來的 delegate,當 proxy delegate 收到回調時,如果是要 hook 的方法,則調用 proxy 的實現,proxy 的實現***會調用原來的 delegate;反之,則通過消息轉發機制將消息轉發給原來的 delegate。

下圖示意了整個操作流程:

通過對NSURLConnection、NSURLSession和CFNetwork這三個類中關鍵方法的hook來獲取上報指標。具體hook哪些方法,請看下圖:

將hook方法中得到的相關指標整理成需要的格式上報到服務端,服務端通過數據處理和拆分指標,匯總加計算生成最終的報表。

三、QDAS-APM在集成和使用上的便捷

由于sdk功能基本上采用的都是主動采集功能,無需二次開發,也無需額外引入系統庫。所以在集成和使用上非常便捷。在sdk的集成上,只需要三步驟:

  • 引入sdk庫
  • 引入sdk頭文件
  • 在app的didFinishLauchingWithOptions里初始化sdk,并傳入appkey即可。

【本文是51CTO專欄機構360技術的原創文章,微信公眾號“360技術( id: qihoo_tech)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2014-04-24 13:21:20

2014-08-14 11:52:34

ITILAPM

2018-09-03 09:22:25

監控服務器性能

2014-09-02 11:40:37

APPAPM移動應用監測

2014-11-06 10:00:46

Gartner

2014-07-07 17:40:34

云智慧

2015-07-27 11:00:33

應用性能監控工具APM

2020-03-20 08:30:56

手機移動端適配

2021-09-03 09:44:13

移動端性能優化U-APM

2023-07-24 09:03:38

汽車之家頁面性能監控

2014-05-26 16:52:29

移動前端web組件

2010-05-26 18:40:54

Linux性能監控

2011-11-08 21:47:37

Linux 監控 IO

2010-05-26 18:31:51

Linux性能監控

2010-05-26 18:21:04

Linux性能監控

2017-03-02 12:39:04

移動端iOS監控體系

2022-12-29 08:56:30

監控服務平臺

2014-11-04 09:26:11

2023-04-21 10:05:00

B端項目頁面

2018-05-22 10:30:37

深度學習蘑菇街移動端
點贊
收藏

51CTO技術棧公眾號

日韩 欧美 精品| 玖玖爱在线精品视频| 精品自拍一区| 成人午夜在线播放| 欧美中文字幕在线观看| 少妇一级黄色片| 精品国产亚洲一区二区三区大结局| 一区二区视频在线| 欧美日韩在线高清| 99国产精品欲| 男人的天堂亚洲在线| 久久精品亚洲热| 人妻丰满熟妇aⅴ无码| 国产欧美在线观看免费| 亚洲va欧美va人人爽午夜 | 日本久久久久久久| 欧美肉大捧一进一出免费视频| 另类专区亚洲| 亚洲免费观看高清完整版在线观看| 国内一区在线| 国产男男gay体育生白袜| 在线亚洲激情| 另类专区欧美制服同性| 亚洲第九十七页| 国产一区二区三区亚洲综合| 欧美日韩一区二区在线| 美女在线免费视频| www在线免费观看| 粉嫩高潮美女一区二区三区| 国产精品免费一区豆花| 成人免费区一区二区三区| 国产精品久久久久久久免费观看| 日韩精品欧美国产精品忘忧草 | 韩日精品一区二区| 亚洲精品老司机| 亚洲高清123| 无码国产伦一区二区三区视频| 久久国产精品99久久久久久老狼 | 国内精品久久久久影院薰衣草 | 久久久久久免费毛片精品| 亚洲一区二区在线| 曰批又黄又爽免费视频| 久久精品盗摄| 9.1国产丝袜在线观看| 国产一区二区三区在线视频观看| 欧美精选视频在线观看| 精品区一区二区| 亚洲一区二区福利视频| 伦一区二区三区中文字幕v亚洲| 欧美午夜视频一区二区| 玩弄中年熟妇正在播放| 国精一区二区三区| 一区二区三区视频在线看| 久久免费看毛片| 欧美日韩在线资源| 国产午夜精品在线观看| 久久综合福利| 人妻精品一区一区三区蜜桃91| 国产福利精品一区二区| 91免费看蜜桃| 国产婷婷一区二区三区久久| 国产综合一区二区| 成人一区二区电影| 国产精品久久久久久免费播放| 免费在线观看一区二区三区| 国产精品视频自在线| 中文字幕日日夜夜| 久久国产尿小便嘘嘘| 国产日韩欧美视频在线| 国产精品女同一区二区| 国产综合色在线视频区| 99超碰麻豆| 人妻妺妺窝人体色www聚色窝| bt欧美亚洲午夜电影天堂| 国产经品一区二区| 亚洲人视频在线观看| 久久综合九色综合97婷婷女人| 免费看污久久久| 福利视频在线看| 国产精品国产精品国产专区不片 | 少妇毛片一区二区三区| 狼人天天伊人久久| 亚洲男人天堂2024| 日本不卡一区视频| 亚洲情侣在线| 久久久综合免费视频| 三级视频在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美中文字幕在线| 在线视频播放大全| 国产精品白丝av| 久久66热这里只有精品| 国产女人在线观看| 中文字幕字幕中文在线中不卡视频| 免费日韩在线观看| 午夜久久中文| 欧美一区二区三区四区高清| 大尺度在线观看| 精品国产网站| 九九九久久久久久| 无码人妻aⅴ一区二区三区有奶水| 久久精品国产色蜜蜜麻豆| 肥熟一91porny丨九色丨| 免费看男男www网站入口在线| 亚洲色图视频网| 日韩欧美亚洲天堂| 国产一区二区三区免费在线| 日韩精品一二三四区| 男女性高潮免费网站| 午夜一级久久| 91精品天堂| 成人免费高清在线播放| 亚洲一区二区欧美日韩 | 成人午夜视频福利| 日韩一区免费观看| free性护士videos欧美| 欧美日韩高清一区| 亚洲午夜久久久久久久久红桃| 一区二区三区午夜视频| 日本一区二区三区四区视频| 国产精品无码免费播放| 国产午夜亚洲精品理论片色戒 | 亚洲精品自拍视频在线观看| 亚洲乱码视频| 亚洲a在线播放| 91在线看片| 欧美性猛交xxxx富婆| 乳色吐息在线观看| 99成人超碰| 国产成人精品在线| 无码国精品一区二区免费蜜桃| 自拍av一区二区三区| 一区二区三区免费播放| 亚洲永久精品唐人导航网址| 久久久久免费视频| 国产免费叼嘿网站免费| 亚洲国产精品99久久久久久久久| 波多野结衣家庭教师在线| 亚洲一二av| 美女av一区二区三区 | 精品欧美一区二区在线观看| 中文字幕美女视频| 麻豆精品国产传媒mv男同| 欧洲在线视频一区| 成人欧美一区二区三区的电影| 欧美精品一区二区久久久| 一级黄色录像视频| 国产黄人亚洲片| 国产激情片在线观看| www一区二区三区| 精品国内亚洲在观看18黄 | 精品国偷自产国产一区| 校园春色 亚洲| 国产毛片精品视频| 日韩精品一区二区三区电影| 国产精品xnxxcom| 欧美另类暴力丝袜| 亚洲国产精品18久久久久久| 亚洲激情中文1区| 中文字幕在线国产| 亚洲欧美综合| 国产在线精品一区二区三区》| 77thz桃花论族在线观看| 亚洲精品xxx| 日本中文字幕在线| 久久精品无码一区二区三区 | 国产乱码精品一区二区三区五月婷| 日本一区二区免费高清视频| 精品国产乱码一区二区三区 | 亚洲毛茸茸少妇高潮呻吟| 国产欧美一区二区三区在线看蜜臂| 99r精品视频| 国内外免费激情视频| 日韩av免费大片| 亚洲www永久成人夜色| 蜜臀av国内免费精品久久久夜夜| 亚洲国产精品电影| 69亚洲精品久久久蜜桃小说| 欧美国产在线观看| 熟妇女人妻丰满少妇中文字幕| 欧美日韩一卡| 久热这里只精品99re8久| 78精品国产综合久久香蕉| 久久人人爽人人爽爽久久 | 高清在线观看日韩| 亚洲成年人在线播放| 午夜精品区一区二区三| 97久久中文字幕| 欧美精品xxx| 欧美日韩国产亚洲沙发| 欧美色区777第一页| 国产97免费视频| hitomi一区二区三区精品| 亚洲少妇第一页| 欧美精品一区二区三区久久久竹菊| 精品不卡在线| 青娱乐极品盛宴一区二区| 欧美精品福利在线| 成全电影播放在线观看国语| 日韩精品自拍偷拍| 无码视频一区二区三区| 亚洲色大成网站www久久九九| 性色av蜜臀av浪潮av老女人| 奇米色777欧美一区二区| 国产激情片在线观看| 精品日韩欧美一区| 国产一区二区三区黄| 久久国产三级| 国内精品久久久久| 免费网站成人| 亚洲精品色婷婷福利天堂| 国产老女人乱淫免费| 欧美性高跟鞋xxxxhd| 亚洲最大的黄色网址| 久久久久久久网| 中文字幕在线观看91| 欧美a级一区二区| 国产96在线 | 亚洲| 欧美www视频在线观看| 麻豆av一区二区| 一区二区三区国产好| 国产在线高清精品| 日韩伦理在线| 欧美激情一区二区三区高清视频| 亚洲免费视频一区二区三区| 精品视频偷偷看在线观看| 亚洲国产精品suv| 制服丝袜在线91| 波多野结衣视频在线观看| 午夜电影网亚洲视频| 日韩在线观看视频一区二区| 国产午夜一区二区三区| 国产ts丝袜人妖系列视频 | 亚洲激精日韩激精欧美精品| 一区二区三区在线视频看| 国产不卡一二三区| 精品乱码一区二区三区| 成人av资源网址| 成人h在线播放| 日韩精品成人在线观看| 成人网在线观看| 亚洲成人1区| 国产精品揄拍500视频| 日本欧美不卡| 国产成人涩涩涩视频在线观看 | 91免费高清视频| 成人免费视频观看| 国产成人一区二区三区电影| 欧美aa视频| 日本精品免费一区二区三区| 手机av在线| 日本国产精品视频| 不卡av影片| 国产成人精品免费久久久久| 在线天堂资源| 国产成人涩涩涩视频在线观看| 欧美日韩精品免费观看视完整| 清纯唯美亚洲综合| 亚洲成人人体| 国产在线日韩在线| 韩日精品一区| 国产精品直播网红| 国产乱码精品一区二区三区亚洲人| 91久久久精品| 91精品尤物| 精品一区久久久| 国产欧美久久一区二区三区| 五月天综合网| 国产精品99久久精品| 先锋影音男人资源| 红桃视频国产精品| 浮妇高潮喷白浆视频| 肉色丝袜一区二区| 黄色一级片免费的| 国产成人在线视频网址| 在线免费看黄色片| 久久久精品国产免大香伊| 91导航在线观看| 亚洲精品乱码久久久久| 日韩 欧美 综合| 欧美在线观看视频一区二区三区 | 性欧美18xxxhd| 国产精品高清在线观看| 2019中文亚洲字幕| 国产免费一区二区| 精品亚洲成人| 潘金莲一级淫片aaaaa免费看| 欧美久色视频| 欧美视频第一区| 久久99久国产精品黄毛片色诱| 妖精视频在线观看| 国产性色一区二区| 精品99在线观看| 色网综合在线观看| 国产福利资源在线| 亚洲色图35p| 99自拍视频在线观看| 欧美一级高清免费| 亚洲图片小说区| 久久精品国产美女| 91成人精品视频| wwwxxx黄色片| 国产成人在线色| 337人体粉嫩噜噜噜| 亚洲一区二区不卡免费| 欧美一级黄视频| 亚洲大胆人体在线| 含羞草www国产在线视频| 91精品国产网站| 成年永久一区二区三区免费视频 | 日本中文字幕电影在线观看 | 黄色在线看片| 国产精品丝袜白浆摸在线| 久久久伦理片| 黄色网络在线观看| 日本欧美加勒比视频| 蜜臀av粉嫩av懂色av| 国产精品成人午夜| 夜夜躁日日躁狠狠久久av| 精品粉嫩aⅴ一区二区三区四区| 日本三级视频在线播放| 青草热久免费精品视频 | 日韩欧美在线一区二区| 黑人一区二区| 超碰在线资源站| 欧美极品少妇xxxxⅹ高跟鞋 | 日韩午夜激情av| 91看片在线观看| 日本久久91av| 三级小说欧洲区亚洲区| 国产精品一二三在线观看| 蜜桃av噜噜一区二区三区小说| 草草地址线路①屁屁影院成人| 夜夜精品视频一区二区| 国产精品视频a| 日韩最新在线视频| 色天使综合视频| 欧美在线一区二区三区四区| 日韩一级欧洲| 国产精品手机在线观看| 亚洲一区二区欧美日韩| 成人av免费播放| 欧美日本啪啪无遮挡网站| 亚洲精品一区av| 亚洲激情一区二区| 免费国产亚洲视频| 亚洲一二三四视频| 欧美日韩你懂得| 女女色综合影院| 成人欧美一区二区三区黑人孕妇| 999精品视频| 国产美女视频免费看| 国产精品不卡一区二区三区| 在线免费观看日韩视频| 久久精品国产亚洲精品| 日韩av黄色| 手机福利在线视频| 国产一区二区三区久久久| 欧美做爰爽爽爽爽爽爽| 日韩色视频在线观看| 亚洲七七久久综合桃花剧情介绍| 91丝袜脚交足在线播放| 国产精品v亚洲精品v日韩精品| 亚洲无人区码一码二码三码| 精品久久久久久久久久久久久| 色猫av在线| 国产精品久久久久久久av大片 | 日韩中文在线不卡| 国产成人视屏| 欧美人成在线观看| 2021中文字幕一区亚洲| 国产一区二区视频免费| 丝袜美腿亚洲一区二区| 国产精品1区| 久草视频国产在线| www激情久久| 91久久精品国产91性色69| 欧美床上激情在线观看| 色狼人综合干| 中文字幕精品一区二区三区在线| 亚洲蜜桃精久久久久久久| 亚洲av成人精品一区二区三区在线播放 | 精品91在线| 国产精品三级在线观看无码| 欧美亚洲丝袜传媒另类| 黄网站免费在线观看| 国产精品theporn88| 久久一区亚洲| 成年人av电影| 日韩精品一二三四区| 国产精品日本一区二区不卡视频| 日本福利视频网站| 国产日产欧产精品推荐色| 一级特黄特色的免费大片视频| 欧美激情综合色| 久久国产成人精品| 中国一级特黄录像播放| 在线播放一区二区三区| 黄色软件视频在线观看| 五月天男人天堂|