這篇文章主要介紹瞭如何使用NodeJS Lighthouse Gulp建立自動化網站效能測試的工具,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
Lighthouse 是Google公司旗下一個開源的、可自動化檢測網站品質的工具,界面友好、操作簡單、使用方式多樣、視角全面,可以用它來測試任意網頁,普通使用者、QA、開發都可以快速上手。
使用Lighthouse的方式有很多種,最簡單的,可以使用Chrome 的開發者工具,步驟如下:
開啟Chrome 瀏覽器
按F12
在彈出的視窗中開啟audits 標籤
點選Perform an audit...勾選全部
#Run audit
npm install -g lighthouse
lighthouse
first-meaningful-paint 毫秒數,最後取10次的平均值,為了視覺化與可讀性,最終的結果以網頁的形式展示,使用者可在網頁上看到每次執行Lighthouse 之後
first-meaningful-paint 的毫秒數,也可以看到平均值,如果使用者對某次執行的細節感興趣,可以點擊連結察看。最終的結果長這個樣子:
npm i lighthouse --save-dev npm i chrome-launcher --save-dev npm i fs-extra --save-dev npm i gulp --save-dev配置在專案根目錄下建立Lighthouse的設定檔
lighthouse-config.js, 這裡我們全部使用預設配置,使用預設設定需在設定文件中宣告
extends: 'lighthouse:default'。
module.exports = { extends: 'lighthouse:default' }如果讀者需要了解更詳細的設定選項,可參考:
gulpfile.js,首先引入所有依賴的工具:
const gulp = require('gulp'); const lighthouse = require('lighthouse'); const chromeLauncher = require('chrome-launcher'); const printer = require('lighthouse/lighthouse-cli/printer'); const Reporter = require('lighthouse/lighthouse-core/report/report-generator'); const fs = require('fs-extra'); const config = require('.lighthouse-config.js');在開始使用lighthouse 之前,首先建立一個寫入檔案的方法, 用於最後產生自訂的report 文件:
async function write(file, report) { try { await fs.outputFile(file, report); } catch (Error e) { console.log("error while writing report ", e); } }在呼叫Lighthouse 之前,我們需要先啟動一個Chrome 的instance ,並將連接埠號碼提供給Lighthouse 。
--headless表示不開啟 browser 視窗。
async function launchChrome() { let chrome; try { chrome = await chromeLauncher.launch({ chromeFlags: [ "--disable-gpu", "--no-sandbox", "--headless" ], enableExtensions: true, logLevel: "error" }); console.log(chrome.port) return { port: chrome.port, chromeFlags: [ "--headless" ], logLevel: "error" } } catch (e) { console.log("Error while launching Chrome ", e); } }Chrome 實例啟動之後,我們就可以呼叫Lighthouse , 呼叫時,須提供需要進行效能測試的網站,參數,以及前文創建好的配置,參數包含了Chrome 啟動端口,啟動方式(是否headless 等資訊)。
async function lighthouseRunner(opt) { try { return await lighthouse("https://www.baidu.com", opt, config); } catch (e) { console.log("Error while running lighthouse"); } }Lighthouse 的返回結果是一個包含效能測試結果, 最終版的配置參數, 指標分組等資訊的 json 對象,讀者可以參考 Understanding Results 獲得更深入的理解。
由於這裡我們需要使用Lighthouse 官方的模板產生報告,因此呼叫官方提供的方法,注意第一個參數傳入
result.lhr, 第二個參數聲明產生html 報告(還可以產生csv 等格式的報告)。
function genReport(result) { return Reporter.generateReport(result.lhr, 'html'); }下面我們寫一個將上面幾個方法串起來的函數,先啟動一個Chrome 實例, 然後將Chrome 實例的某些參數傳遞給Lighthouse,使用lighthouse 跑出來的結果產生報告,並寫入html 文件, html文件應帶有時間戳記和執行順序作為唯一標識。
start 方法傳回結果中的
first-meaningful-paint(這是我們最關心的指標,讀者可依自身需求替換,具體指標可參考 Lighthouse)。
async function run(timestamp, num) { let chromeOpt = await launchChrome(); let result = await lighthouseRunner(chromeOpt); let report = genReport(result); await printer.write(report, 'html', `./cases/lighthouse-report@${timestamp}-${num}.html`); return result.lhr.audits['first-meaningful-paint'].rawValue; await chrome.kill(); }
下面, 我们可以正式开始写一个 gulp task 啦,首先获得当前时间戳,用于最终生成的报告命名,然后声明一个数组,用于记录每次跑 Lighthouse 生成的 first-meaningful-paint
毫秒数,然后跑10次 Lighthouse, 使用提前创建的模板文件,根据这10的结果,生成一个汇总报告,这里,笔者使用了Lighthouse对外暴露的工具函数进行字符串的替换。
gulp.task('start', async function() { let timestamp = Date.now(); let spent = []; for(let i=0; i<p>最后的最后, 执行:</p><pre class="brush:php;toolbar:false">gulp start
万事大吉。
附上汇总界面的模板源码:
nbsp;html> <meta> <meta> <title>Lighthouse Summary Report</title> <style> body { font-family: sans-serif; } table { margin: auto; } tr { border: 1px solid grey; } h1 { text-align: center; margin: 30px auto 50px auto } </style>
Case No. | First Meaningful Paint | Link To Details |
---|
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
jQuery+AJAX+PHP+MySQL开发搜索无跳转无刷新的功能
关于vue中extend,mixins,extends,components,install的操作
以上是如何使用NodeJS + Lighthouse + Gulp建立自動化網站效能測試的工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!