主頁 > 企業開發 > 搭建自動化 Web 頁面性能檢測系統 —— 設計篇

搭建自動化 Web 頁面性能檢測系統 —— 設計篇

2023-05-26 13:24:33 企業開發

我們是袋鼠云數堆疊 UED 團隊,致力于打造優秀的一站式資料中臺產品,我們始終保持工匠精神,探索前端道路,為社區積累并傳播經驗價值,,

本文作者:琉易 liuxianyu.cn

頁面性能對于用戶體驗、用戶留存有著重要影響,當頁面加載時間過長時,往往會伴隨著一部分用戶的流失,也會帶來一些用戶差評,性能的優劣往往是同類產品中勝出的影響因素,也是一個網站口碑的重要評判標準,

一、名稱解釋

前端監控一般分為合成監控和真實用戶監控,

1.1、合成監控

合成監控就是模擬用戶的使用場景,訪問一個頁面,通過一些工具和規則去檢測頁面,提取一些性能指標,生成一份檢測報告,注重檢測,

合成監控的優缺點:

優點 缺點
實作簡單,社區方案成熟 配置復雜,不能完全還原用戶真實場景
能采集到更豐富的資料 登錄等場景需要單獨處理
不影響真實用戶的頁面訪問性能 單次檢測資料不夠準確

1.2、真實用戶監控

file

真實用戶監控是指用戶在頁面上訪問,訪問時會產生各類性能資料,在用戶訪問停止的時候,將這些性能資料傳輸到服務端,進行資料整理分析的程序,注重監控,

真實用戶監控的優缺點:

優點 缺點
完全還原用戶真實場景 對用戶的訪問性能有一定影響
登錄等場景無需單獨解決 無法采集完整的資源加載瀑布圖
資料樣本足夠大且真實,資料價值高 無法可視化展示頁面加載程序

1.3、定義合適的性能指標

  1. 首次內容渲染時長(First Contentful Paint, FCP)
    頁面最新出現的內容渲染時長
  2. 首次展現平均值(Speed Index, SI)
    頁面內容可見填充的速度
  3. 最大內容繪制時間(Largest Contentful Paint, LCP)
    頁面核心內容呈現時間,不采用 loading 狀態的資料
  4. 可互動時間(Time to Interactive, TTI)
    用戶是否會體驗到卡頓
  5. 總阻塞時間(Total Blocking Time, TBT)
    主執行緒被阻塞的時間,無法作出輸入回應
  6. 累計布局樣式偏移(Cumulative Layout Shift, CLS)

file

二、為什么做

基于需要對公司的 Web 產品進行性能優化,在做性能優化的同時,優化的衡量標準也不可或缺,在頁面開發時觀察頁面的性能并不夠準確,因為不同的開發設備性能表現不同,所伴隨的變數也較多,不能夠準確的反映性能優化效果,也無法觀察產品的性能變化趨勢,為什么自研呢,自研有以下好處:

(1)借助第三方的性能檢測服務往往不能保證檢測資料的安全性,

(2)第三方的性能檢測服務一般無法與公司內部系統打通流程,一般無法自動化檢測公司內部產品,

(3)可以做一些自定義開發,比如根據產品特點調整不同的性能指標權重,從而更準確的計算分數,

那么在檢測收集到了這么多的指標資料后,頁面性能到底如何呢,如果你的老板問你公司的產品頁面性能如何,你該如何回復呢?假設列舉一大堆時間指標、偏移量等資料,老板看到這些數值的時候可能就是一頭霧水,根本理解不了產品的頁面性能到底如何,那么自研可以針對產品型別,給出一個統一的標準,這樣就方便去對比各個產品的性能表現了,

三、怎么做

3.1、基礎依賴

下面是檢測系統的整體架構:

file

這里設計的性能檢測系統主要包含前端頁面和服務端,其中:

前端頁面展示性能檢測入口、檢測結果、性能趨勢、性能排行榜等,

服務端基于 Nestjs + Lighthouse + Puppeteer 實作,通過 Typeorm 操作 MySQL 資料庫,記錄和查詢性能檢測資料,

另外輔助一些插件進行定時監測、結果通知等操作,實作自動化檢測,相比頁面開發時通過開發者工具中的 Lighthouse 檢測有以下好處:

(1)不用開發者主動觸發;

(2)不會阻塞開發程序,無需等待;

Lighthouse 用于檢測 Web 網頁的性能,主要基于 4 個主要步驟實作,分別是互動驅動、性能資料收集、審計整理以及記錄,具體為:

(1)用戶在性能檢測入口輸入待檢測的頁面地址,點擊開始檢測,頁面通過介面呼叫性能檢測服務

(2)Lighthouse 遍歷當前頁面的收集器方法并合成一個總的收集器方法以便于采集資料

(3)對上述采集到的性能資料進行計算和評分

Lighthouse 主要提供六個收集器,通過以下六個收集器即可采集到和實際訪問接近的性能資料,每個收集器的功能不一,如下:

(1)收集 DOM 元素相關資料、DOM 節點最大深度、滾動條等

(2)收集頁面內的所有圖片資源,并記錄下每個圖片元素的寬高和定位等屬性

(3)收集相關指標,如:FCP、LCP、CLS 等

(4)收集 JS 事件監聽數量、JS 堆疊等

(5)收集頁面的所有請求,包括狀態碼、請求頭、回應頭、請求方式等

(6)收集 window.performance 下的性能資料,用于計算加載時間

Puppeteer 是 Chrome 團隊提供的一個無界面 Chrome 工具,俗稱無頭瀏覽器,通過提供的 API 可以控制 Node 端的 Chrome 工具進行指定的操作,在這里設計的性能檢測系統中,由于 Lighthouse 進行檢測時打開的類似于無痕視窗,沒有登錄資訊,所以 Puppeteer 主要幫助我們實作模擬登錄,

當檢測頁面需要登錄時,分析出頁面屬于哪個 devops 實體,然后通過 Puppeteer 跳轉到對應的登錄頁面,然后輸入用戶名、密碼、驗證碼,待登錄完成后跳轉至正確的頁面,再進行頁面性能檢測,如果登錄后還在登錄頁,表示登錄失敗,則獲取錯誤提示并拋出,

以下是檢測系統的一個流程圖:

file

3.2、關鍵代碼

// 開始檢測
async run(urlDto: UrlDto): Promise<object> {
    const start = new Date().getTime();
    try {
        const { url, loginUrl } = urlDto;
        const needLogin = url.includes('devops') || loginUrl;
        console.log(`本次檢測${needLogin ? '' : '不'}需要登錄`, url);

        const runResult = needLogin
            ? await this.withLogin(urlDto)
            : await this.withOutLogin(url);

        // 保存檢測結果檔案,便于預覽
        const urlStr = url.replace(/http(s?):\/\//g, '').replace(/\//g, '');
        fs.writeFileSync(`./static/${urlStr}-report.html`, runResult?.report);

        // 性能資料
        const performance = runResult?.lhr?.categories?.performance || {};
        const data = https://www.cnblogs.com/dtux/archive/2023/05/26/{
            ...performance,
            auditRefs: performance?.auditRefs?.filter((item) => item.weight),
        };
        // console.log(data);
        console.log(`本次耗時:${((new Date().getTime() - start) / 1000).toFixed(2)}s`);

        return {
            code: 200,
            data,
            message: `耗時:${((new Date().getTime() - start) / 1000).toFixed(2)}s`,
        };
    } catch (error) {
        return {
            code: 401,
            message: error,
        };
    }
}

3.3、檢測規則

系統除了支持手動輸入網頁地址檢測,也支持自動檢測,為了便于統計每個子產品的真實表現,每天凌晨自動檢測 10 次,去掉最高分,去掉最低分,從其余分數中選擇中位數作為每天的檢測評分,

性能檢測時的資料采集可能因為網頁服務的不穩定性,導致有偏大或偏小的資料,所以提供某個時間段某個指標的直方圖來分析資料的基本特征,也會提供某個產品的整體分數趨勢,便于統計某個時間段內該產品的性能變化,也可以提現性能優化前后的效果,

file

四、寫在后面

這篇文章簡單介紹了下該性能檢測系統的初步設計、一些頁面性能的概念以及采用的技術點,后續請關注《搭建自動化 Web 頁面性能檢測系統 —— 實踐篇》,


最后

歡迎關注【袋鼠云數堆疊UED團隊】~
袋鼠云數堆疊UED團隊持續為廣大開發者分享技術成果,相繼參與開源了歡迎star

  • 大資料分布式任務調度系統——Taier
  • 輕量級的 Web IDE UI 框架——Molecule
  • 針對大資料領域的 SQL Parser 專案——dt-sql-parser
  • 袋鼠云數堆疊前端團隊代碼評審工程實踐檔案——code-review-practices
  • 一個速度更快、配置更靈活、使用更簡單的模塊打包器——ko

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/553466.html

標籤:其他

上一篇:JavaScript 格式化金額

下一篇:返回列表

標籤雲
其他(159745) Python(38169) JavaScript(25456) Java(18129) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7211) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5341) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1976) 功能(1967) Web開發(1951) HtmlCss(1948) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 搭建自動化 Web 頁面性能檢測系統 —— 設計篇

    >我們是[袋鼠云數堆疊 UED 團隊](http://ued.dtstack.cn/),致力于打造優秀的一站式資料中臺產品。我們始終保持工匠精神,探索前端道路,為社區積累并傳播經驗價值。。 >本文作者:琉易 [liuxianyu.cn](https://link.juejin.cn/?target=h ......

    uj5u.com 2023-05-26 13:24:33 more
  • JavaScript 格式化金額

    # JavaScript 格式化金額 ## 一、使用 `toLocaleString()` 要格式化金額,可以使用 JavaScript 的 `toLocaleString()` 方法。該方法可以將數字轉換為本地化的字串表示形式,并可以指定貨幣符號、小數點和千位分隔符等格式。 代碼如下: 1. 美 ......

    uj5u.com 2023-05-26 13:24:07 more
  • 【一步步開發AI運動小程式】八、利用body-calc進行姿態識別

    > 隨著人工智能技術的不斷發展,阿里體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓**云上運動會、線上運動會、健身打卡、AI體育指導**等概念空前火熱。那么,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本 ......

    uj5u.com 2023-05-26 13:10:31 more
  • Nodejs 應用編譯構建提速建議

    前端構建的提速是一項比較復雜且細節的工程, 目前產品上在持續跟蹤構建慢的應用, 努力優化編譯速度, 但前端本身擁有一個比較自由的技識訓境, 沒有統一的構建工具與流程, 另外語言本身的執行效率、單執行緒的構建也不好讓編譯機發揮其最大能力, 所以目前全域的通用優化手段還是會比較局限, 還是依賴專案自身的優... ......

    uj5u.com 2023-05-26 13:05:20 more
  • CSS中通配輸入文字的小技巧——如何在元素名中包含通配符

    CSS中,*的作用是通配表示“全部”。遺憾的是,并沒有一種通配元素名的方法。 例如,我有好幾個東西class都標記為了my-element-序號,就像這樣: ```html ... ``` 我現在希望讓所有這些class的東西都應用同一個css規則。可惜,css并不支持這么一種寫法: ```css ......

    uj5u.com 2023-05-26 13:05:15 more
  • uniapp 渲染Markdown

    近日在撰寫一個小程式,將日記功能移植到小程式中,雖然在手機端寫日記一般用不到Markdown,但是仍想在小程式中查看在電腦端寫的Markdown格式的內容,如代碼塊等。 經過查詢,找到一個被廣泛使用的解決方案是towxml 現記錄如下: > 首先將代碼克隆下來 ```js git clone htt ......

    uj5u.com 2023-05-26 13:05:11 more
  • React實作可頁面可調節

    > 效果預覽 ![調節頁面.gif](https://wansherry.com/api/fc01e2c58219126e20367e856ebad24c.gif) > 關鍵代碼 ```javascript //調節視窗大小 useEffect(() => { if (conref.current) ......

    uj5u.com 2023-05-26 13:05:04 more
  • 記錄--超長溢位頭部省略打點,坑這么大,技巧這么多?

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 在業務中,有這么一種場景,表格下的某一列 ID 值,文本超長了,正常而言會是這樣: 通常,這種情況都需要超長省略溢位打點,那么,就會變成這樣: 但是,這種展示有個缺點,3 個 ID 看上去就完全一致了,因此,PM 希望能夠實作頭部省略打點 ......

    uj5u.com 2023-05-26 12:51:08 more
  • 前端微服務無界實踐

    隨著專案的發展,前端SPA應用的規模不斷加大、業務代碼耦合、編譯慢,導致日常的維護難度日益增加。同時前端技術的發展迅猛,導致功能擴展吃力,重構成本高,穩定性低。因此前端微服務應運而生。 ......

    uj5u.com 2023-05-26 12:43:27 more
  • 影片

    1. 影片 影片(animation)是CSS3中具有顛覆性的特征之一,可以通過設定都各節點來精確控制一個或一組影片,常用來實作復雜的影片效果。 相比較過度,影片可以實作更多變化,更多控制,連續自動播放等效果。 1.1 影片的基本使用 制作影片分為兩步: (1)先定義影片。 (2)再使用(呼叫)影片 ......

    uj5u.com 2023-05-26 12:43:10 more