自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自動化 Web 性能優(yōu)化分析方案

開發(fā) 前端 新聞 自動化
從技術(shù)方面來講,前端性能監(jiān)控主要分為兩種方式,一種叫做合成監(jiān)控(Synthetic Monitoring,SYN),另一種是真實用戶監(jiān)控(Real User Monitoring,RUM)。

 在構(gòu)建 Web 站點(diǎn)的過程中,任何一個細(xì)節(jié)都有可能影響網(wǎng)站的訪問速度。如果開發(fā)人員不了解前端性能相關(guān)知識,很多不利網(wǎng)站訪問速度的因素會在線上形成累加,從而嚴(yán)重影響網(wǎng)站的性能,導(dǎo)致網(wǎng)站訪問速度變慢、用戶體驗低下,最終導(dǎo)致用戶流失。頁面性能對網(wǎng)頁而言,可謂舉足輕重。因此,對頁面的性能進(jìn)行檢測分析,是開發(fā)者不可忽視的課題。那么我們?nèi)绾螌撁孢M(jìn)行監(jiān)控分析及性能評判?對性能評判的規(guī)則又是什么樣的呢?

從技術(shù)方面來講,前端性能監(jiān)控主要分為兩種方式,一種叫做合成監(jiān)控(Synthetic Monitoring,SYN),另一種是真實用戶監(jiān)控(Real User Monitoring,RUM)。

  • 合成監(jiān)控,就是在一個模擬場景里,去提交一個需要做性能檢測的頁面,通過一系列的工具、規(guī)則去運(yùn)行你的頁面,提取一些性能指標(biāo),得出一個性能報告。

  • 真實用戶監(jiān)控,就是用戶在我們的頁面上瀏覽,瀏覽過程就會產(chǎn)生各種各樣的性能數(shù)據(jù),我們把這些性能數(shù)據(jù)上傳到我們的日志服務(wù)器上,進(jìn)行數(shù)據(jù)的提取清洗加工,最后在我們的監(jiān)控平臺上進(jìn)行展示的一個過程。

前者注重“檢測”,后者注重“監(jiān)控”。

下文將從多個方面,向大家介紹政采云前端 ZooTeam 的 Web 性能優(yōu)化分析系統(tǒng)—— “百策”,是如何采集頁面性能數(shù)據(jù),并通過一系列計算加工,產(chǎn)出頁面性能報表的。

百策,取名自歷史人物魏征。魏征,字玄成。唐太宗李世民的諫臣,因敢于直諫,被稱為諍臣。因多次指出唐太宗李世民的過錯并能提出有效政策,因為被稱為 “魏百策”。

如何采集頁面性能數(shù)據(jù)

百策系統(tǒng)采用了上文提到的 “合成監(jiān)控” 的方案,得到了一組與宿主環(huán)境無關(guān)的性能數(shù)據(jù)。說到合成監(jiān)控方案,當(dāng)屬 Google Chrome 團(tuán)隊出品的開源自動化分析工具 Lighthouse。

Lighthouse 的工作流程有幾個主要的步驟。部分步驟發(fā)生在瀏覽器中,其余的步驟由 Lighthouse 運(yùn)行器執(zhí)行。

Lighthouse 工作原理

下面是 Lighthouse 的組成部分:

  • 驅(qū)動和 Chrome Debugging Protocol 進(jìn)行交互。

  • 收集器  使用驅(qū)動程序收集網(wǎng)頁信息。最小化后處理。收集器的輸出結(jié)果被稱為  Artifact 。

  • 審查器將  Artifact 作為輸入,審查器會對其運(yùn)行 1 個測試,然后分配通過/失敗/得分的結(jié)果。

  • 類別  將審查的結(jié)果分組到面向用戶的報告中(如最佳實踐)。對該部分加權(quán)求和然后得出評分。

簡單來說流程就是:建立連接 -> 收集日志 -> 分析 -> 生成報告。

而我們的百策系統(tǒng)是在 Lighthouse 的基礎(chǔ)上,進(jìn)行了部分功能的定制和創(chuàng)新。

區(qū)別于 Lighthouse 的功能

1)使用 Puppeteer

Puppeteer 是一個 Node 庫,它提供了一個高級 API 來通過 DevTools 協(xié)議控制 Chromium 或 Chrome。相比較 Selenium 或是  PhantomJs ,它最大的特點(diǎn)就是它的  DOM 操作可以完全在內(nèi)存中進(jìn)行模擬,即在  V8 引擎中處理而不打開瀏覽器,而且  V8 引擎 Chrome 團(tuán)隊在維護(hù),會擁有更好的兼容性和前景。

運(yùn)行下面這段代碼就能獲取到視窗可視區(qū)域的寬高:

  1. const puppeteer = require('puppeteer'); 
  2. (async () => {  const browser = await puppeteer.launch();  const page = await browser.newPage();  await page.goto('https://example.com'); 
  3.   const dimensions = await page.evaluate(() => {    return {      width: document.documentElement.clientWidth,      height: document.documentElement.clientHeight    };  }); 
  4.   console.log('Dimensions:', dimensions); 
  5.   await browser.close();})(); 

復(fù)制代碼

Lighthouse 的方案是使用更底層的 DevTools 協(xié)議和瀏覽器交互,我們選擇 Puppeteer 是因為其更簡單,封裝的一些常用的接口足夠滿足我們的需求。

2)訪問頁面前模擬登錄

我們不僅需要檢測可匿名訪問的前臺頁面,也需要檢測登錄后才能操作的后臺頁面。所以在檢測前,我們需要增加一步登錄操作。當(dāng)然這個用戶名密碼也是可選的,當(dāng)檢測到這個 URL 需要登錄時,才會提醒用戶輸入用戶名密碼。

3)收集到數(shù)據(jù)存入數(shù)據(jù)庫

我們將每一次的檢測數(shù)據(jù)保存入庫,對數(shù)據(jù)進(jìn)行整理,獲取頁面性能變化所呈現(xiàn)的趨勢,為支持后續(xù)的統(tǒng)計分析提供數(shù)據(jù)保證。

改造之后的流程是:建立連接 -> 登錄檢測 -> 收集日志 ->  數(shù)據(jù)入庫 -> 分析 -> 生成報告

如何分析頁面性能

定制各項指標(biāo)

系統(tǒng)設(shè)計初期,我們擬定了一系列性能指標(biāo)的權(quán)重和閾值:

Lighthouse 也制定了很多性能指標(biāo),譬如:

  • uses-webp-images:采用新一代格式提供圖片

  • dom-size:DOM 節(jié)點(diǎn)總數(shù)

  • network-requests:頁面加載完成時的請求數(shù)

  • ……

除此之外我們定制了更多的特色指標(biāo),譬如:OSS 圖片是否使用了壓縮后綴。

由于公司的圖片都是放在阿里云 OSS 上的,阿里云 OSS 提供了很方便的優(yōu)化圖片體積的方法,就是給圖片的末尾加上類似參數(shù) ?x-oss-process=image/resize,w_187/quality,Q_75/format,webp ,理論上放在 OSS 上的圖片都需要添加壓縮后綴。為什么說是理論上呢?因為我們發(fā)現(xiàn)如果圖片上傳 OSS 前,事先經(jīng)過了其他壓縮工具的壓縮,再添加壓縮后綴后,圖片的體積變化不大,甚至?xí)霈F(xiàn)負(fù)增長。所以我們調(diào)整了評審算法,不再是簡單地檢查圖片是否增加了 OSS 后綴,而是比較當(dāng)前圖片的體積與添加 OSS 壓縮后綴后體積的差值是否超出比例。

定制檢測模型

檢測系統(tǒng)試運(yùn)行一段時間后,我們發(fā)現(xiàn)并不是所有的指標(biāo)都適用于所有類型的頁面。譬如我們的前臺頁面加載圖片很多且對圖片分辨率要求較高、而后臺頁面圖片則比較少。我們既有傳統(tǒng)的后端渲染 + jQuery 類型的頁面、客戶端渲染 React 頁面、也有經(jīng)過預(yù)渲染的 Vue 頁面。

將所有類型的頁面按同一標(biāo)準(zhǔn)進(jìn)行檢測顯然不太合適,所以我們引入了 檢測模型 的概念。我們根據(jù)頁面所屬的類型,按照對應(yīng)檢測模型進(jìn)行性能檢測。一個檢測模型可以關(guān)聯(lián)多個指標(biāo),并可以配置指標(biāo)權(quán)重和級別。

權(quán)重越大扣分越多,級別分為 error 和 warning,其中 warning 級別的扣分項不算入總分中,譬如請求是否使用 Gzip 就是,因為這一項是前端無法優(yōu)化的,需要推動服務(wù)端去改進(jìn)。

計算頁面評分

提供優(yōu)化建議和趨勢

優(yōu)化建議

針對每項扣分的審查項,我們都提供了詳細(xì)的扣分原因,以及對應(yīng)的解決方案:

頁面性能趨勢變化圖

除了開發(fā)新的功能,我們還積極地對老頁面進(jìn)行重構(gòu),為了分析重構(gòu)前后的收益,我們還提供了查詢歷史數(shù)據(jù)和變化趨勢的功能:

總結(jié)

百策系統(tǒng)為前端頁面提供性能優(yōu)化分析服務(wù),結(jié)合行業(yè)方案及業(yè)務(wù)場景的差異性,完善符合公司業(yè)務(wù)情況的最佳實踐,百策系統(tǒng)制定了一套 Web 頁面性能的檢測標(biāo)準(zhǔn),通過頁面檢測及模型分析,發(fā)現(xiàn)頁面中請求耗時過長、請求資源過大、頁面結(jié)構(gòu)不合理等影響用戶體驗的問題,并針對問題提供相應(yīng)的優(yōu)化建議,幫助開發(fā)者產(chǎn)出渲染速度更快、資源占有更少、體驗更好的頁面。

責(zé)任編輯:張燕妮 來源: 政采云前端團(tuán)隊
相關(guān)推薦

2015-12-23 10:35:35

惡意軟件惡意軟件自動化分析Cuckoo

2013-04-09 10:38:54

2021-10-19 15:11:33

網(wǎng)絡(luò)數(shù)據(jù)技術(shù)

2018-08-08 10:09:47

自動化運(yùn)維MySQL

2019-03-19 14:52:00

性能優(yōu)化MySQL數(shù)據(jù)庫

2011-01-20 10:17:25

ibmdwWeb

2012-03-29 10:57:12

Web自動化測試

2022-02-04 21:50:37

網(wǎng)絡(luò)安全自動化

2014-03-11 11:10:10

PowerShell自動化腳本

2025-01-20 08:00:00

AISQL Server數(shù)據(jù)庫

2012-11-20 17:22:57

2021-09-17 12:54:05

AI 數(shù)據(jù)人工智能

2020-08-03 15:40:57

Web自動化工具測試

2013-05-16 11:07:37

Android開發(fā)Android應(yīng)用自動化測試

2019-10-17 10:10:23

優(yōu)化Web前端

2014-12-10 10:12:02

Web

2018-10-07 15:18:36

2018-12-03 08:46:36

Web瀏覽器SeleniumPython

2017-12-17 21:58:18

2017-01-18 10:57:24

MySQLZabbix監(jiān)控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號