網站性能調優開發工具: Lighthouse, Puppeteer 以及進階部分丨 Google 開發者大會 2018

此次 Google 開發者大會請來了 Lighthouse 的工程師 - Eric Bidelman ,分享如何簡單地使用 Lighthouse, Puppeteer 來自動化咱們平常的流程。它是一個開源的自動化工具,用於改進網絡應用質量。您只須要提供網址,它就測試該頁面,並生成頁面性能報告。你看看能夠採起哪些措施來改進您的應用。node

Lighthouse 重視用戶的首次加載頁面速度,頁面首次顯示內容速度,有意義的內容顯示速度,以及能夠交互的時間。git

以一個頁面加載的週期爲例,首先頁面會發送第一個字節給用戶,而後顯示一些非空白的圖像,而後顯示有意義的內容,而後展現全部內容,容許用戶點擊或其餘操做,而後完結整個加載週期。github

使用方法

運行 Lighthouse 的方式有兩種:做爲 Chrome 擴展程序運行,或做爲命令行工具運行。Chrome 擴展程序提供了用戶友好的界面,方便讀取報告。而命令行工具容許您將 Lighthouse 集成到持續集成系統。web

開發者工具

你只須要打開 Chrome 的開發者工具,點擊 Audits,而後就能夠看到 Lighthouse 界面:chrome

擴展程序

你能夠到 chrome web store 下載並安裝 Lighthouse Chrome 擴展程序。npm

命令行工具

需求:Node.js >= 5編程

  1. 全局安裝 lighthouse
npm install -g lighthouse
複製代碼
  1. 而後輸入你的頁面
lighthouse https://example.com
複製代碼

lighthouse 會自動生成 HTML 報告,你也可使用 JSON 格式。api

自動化部分

你也能夠利用 TravisCI 來自動分析改動後的代碼對於頁面性能的影響。瀏覽器

你只須要在 .travis.yml 裏面加入如下代碼:bash

language: node_js
script:
 - npm run lint
 - npm run build
after_success:
 - ."./travis/deploy_pr_gae.sh"
 - export LH_MIN_PASS_SCORE=96
 - export LH_TEST_URL=https://your.staging.server.com/
 - node travis/runlighthouse.js $LH_TEST_URL $LH_MIN_PASS_SCORE
複製代碼

更多詳情能夠觀看講師在 Github 上面的分享: ebidel/lighthouse-ci

Puppeteer

底層

在談 Puppeteer 以前,咱們須要提到上面是 Headless Chrome。簡單來講,它是一個沒有視圖層的谷歌瀏覽器。

它容許你使用最新的瀏覽器來測試頁面,使用全部最新的屬性,好比說 CSS Grid 格局,Web 推送通知等。

最重要的是,它暴露開發者工具的可編程接口,好比說網絡情況,模擬設備,代碼覆蓋率。

例如你能夠打開一個 WebSocket,而後監聽瀏覽器發生了什麼操做,好比說 CSS 的 getStyleSheetText,DOM 的markUndoableState等。

你也能夠到官網閱讀更加豐富的文檔:chromedevtools.github.io/devtools-pr…

實戰部分

大部分你手動在瀏覽器裏面作的事情,它均可以作到。例如:

  1. 截圖並生成 PDF
  2. 自動填寫表格,UI 測試,鍵盤輸入
  3. 測試 Chrome 插件

安裝方法

它會下載最新版本的 Chromium,以及暴露封裝好的接口出來給開發者使用。

值得注意的是,它的源碼有不少 async/await 的操做,你也能夠這樣操做你的代碼。

npm i puppeteer --save
複製代碼

講師也提供了不少例子,方便學習使用 Puppeteer。

截屏

好比說我要把 https://example.com 頁面截圖,保存爲 example.png。我只須要寫幾行代碼 :

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("https://example.com");
  await page.screenshot({ path: "example.png" });

  await browser.close();
})();
複製代碼

頁面數據

你只須要使用 page.metrics() 方法就能夠了,它會返回一個頁面數據對象。

代碼覆蓋率

你可使用 page.coverage 裏面的方法 startJSCoverage()startCSSCoverage() 來開始測試覆蓋率。以及使用 stopJSCoverage(), stopCSSCoverage() 來結束測試。

攔截網絡請求

你能夠攔截圖片的請求,甚至是把圖片的請求換成其餘請求,例如 http 直接上 https,或圖片換成佔位圖。

生成報告

你能夠經過代碼生成 PDF,例如使用page.pdf() 方法。

github.com/GoogleChrom…

PPTRAAS

以上這些個案都是一些重複出現的平常例子。Puppeteer as a service ]就把以上這些代碼作了封裝,只需在 url 後續加入 url 參數,即可使用服務。

例如你可使用 https://pptraas.com/screenshot?url=https://example.com/ 來截圖。

更多例子能夠到 Puppeteer as a service 來使用服務。

其餘優質的工具

Node Debugger 可讓你打開瀏覽器裏面的開發者工具來調試 Node 程序。

Page Speed Insights 可讓你透過谷歌的平臺來測試裏的網站,並生成報告。

後記

此次可謂乾貨滿滿,收穫豐富。我以前覺得這些工具過於專業,艱澀難懂,沒想到只須要按幾個按鈕,寫幾行代碼,甚至不須要寫代碼即可以測試本身的網站。

就讓我好好地利用這些工具來優化個人我的博客吧(笑

參考資料

  1. Github - ebidel/lighthouse-ci
  2. Github - GoogleChrome/lighthouse
  3. Puppeteer as a service
  4. Tools for Web Developers - Lighthouse

閱讀更多 Google 開發者大會 2018 技術乾貨

相關文章
相關標籤/搜索