在開發大型Web應用或複雜交互的網站,難免會遇到一些頁面性能瓶頸的問題。本篇介紹一下如何利用Chrome的性能面板分析網站的性能瓶頸,應該對你有所幫助。git
注意,爲了減小一些Chrome插件對性能評估產生噪音,最好打開隱身模式訪問頁面進行測試。github
將Chrome切換到隱身模式,而後打開該頁面進行測試: https://googlechrome.github.io/devtools-samples/jank/web
與臺式機和筆記本電腦相比,移動設備的CPU配置要遜色很多,因此咱們測試的時候一般會模擬移動設備進行測試:chrome
Network
按鈕 將網絡切換成Fast 3G
,此時網速爲正常的3GCPU throttling
按鈕 將CPU設置爲 2x slowdown
,此時CPU的運行比平時慢2倍點擊 "Add10",藍色方塊的移動會逐漸變慢(在高端計算機上,可能須要大約20次點擊)瀏覽器
點擊 "Optimize"觸發優化,藍色方塊移動會變快,且頁面明顯變得流暢網絡
注意:若是在優化和未優化的版本之間看不到明顯的區別,請嘗試單擊 " Subtract10" 幾回,而後重試。若是添加了太多的藍色方塊,則只會使CPU佔用巨大內存,而不會看到兩個版本的結果有重大差別。app
當頁面激活 Optimize 時,藍色方塊移動得更快。這是爲何?其實兩種版本都應在相同的時間內將每一個正方形移動相同的空間。咱們能夠在「性能」面板中進行錄製,藉以瞭解如何檢測未優化版本中的性能瓶頸。框架
記錄了頁面的性能後,就能夠衡量頁面的性能究竟如何,咱們能夠對此進行分析:chrome-devtools
衡量任何動畫性能的主要指標是每秒幀數(FPS)。當動畫以 60 FPS 運行時頁面是最流暢狀態工具
固然,經過此演示,很明顯發現這個頁面效果不佳。可是究竟哪一部分有性能問題可能還不是很清楚,所以須要使用該工具進行精確分析和測量。
再介紹一個FPS測量儀工具,它能夠在頁面運行時提供FPS的實時估算值
Command+ Shift+ P
打開命令菜單Rendering
,選擇 Show Rendering
已經知道了頁面性能不佳,並獲取了性能分析圖,咱們就須要進一步循序性能瓶頸:
注:另外一種調試方法經過鍵盤上的 A鍵(選區軌跡坐移)、D鍵(選區軌跡右移)、W鍵(縮小選區)、S鍵(增大選區)
注意:每當執行回調時,都會發生「 觸發動畫幀」 事件
requestAnimationFrame()
app.js:94
的源碼連接。單擊可跳轉至源代碼中的相關行:注意:選擇事件後,使用箭頭鍵選擇它旁邊的事件
在 app.update
事件下,有一堆紫色事件。若是它們更寬,則看起來每一個對象上可能都有一個紅色三角形。單擊紫色的 Layout
事件中的一個,DevTools在 Summary 選項卡中提供有關事件的更多信息。確實,上面有關於強制迴流的警告(換句話說,就是佈局)
在 Summary 標籤中,點擊強制佈局下的 app.js:70
源碼連接,DevTools帶您進入強制佈局的代碼行
注意:此代碼的問題在於,在每一個動畫幀中,它都會更改每一個正方形的樣式,而後查詢頁面上每一個正方形的位置。因爲樣式已更改,所以瀏覽器不知道每一個正方形的位置是否已更改,所以必須從新佈局正方形才能計算其位置。請參見 Avoid forced synchronous layouts
使用上面介紹的工做流程和工具,咱們接下來點擊頁面上的 Optimize 按鈕,頁面切換到優化版本,此時再調用一次性能面板,而後對結果進行分析,咱們能夠看到該應用程序的優化版本所作的工做少得多,從而提升了頁面運行性能。
注意:即便這個「優化」版本也不是那麼好,由於它仍然能夠操縱top每一個正方形的屬性。更好的方法是堅持隻影響合成的屬性。有關更多信息,請參見 Use transform and opacity changes for animations。
本文由博客一文多發平臺 OpenWrite 發佈!