欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js使用Playwright自動化測試頁面性能

 更新時間:2024年11月20日 11:24:26   作者:前端安迪  
對于現(xiàn)在的網(wǎng)站而言,性能的重要性不言而喻,本文將使用Playwright自動化測試頁面性能,感興趣的小伙伴可以跟隨小編一起學習一下

概要

對于現(xiàn)在的網(wǎng)站而言,性能的重要性不言而喻,每一家公司的網(wǎng)站都在追求更快地性能,更好地體驗,但是,該怎么去找到影響網(wǎng)站速度的因素,如何優(yōu)化性能,這是一個非??简炃岸斯こ處熂夹g(shù)功底的時刻。

但其實,現(xiàn)代瀏覽器公開了許多的性能指標,這些指標可以幫我們快速確定需要改進的內(nèi)容和改進方法,今天,我想和大家介紹一種方案,使用Playwright自動化測試頁面性能。

對 Playwright 不了解的同學,可以移步我的上一篇文章了解: Playwright使用指南

我們可以通過 Playwright 查詢?yōu)g覽器提供的各種與性能相關(guān)的 API,然后識別導致網(wǎng)站速度變慢的原因。比如,Chrome 瀏覽器提供了WebVitals 指標,這些指標包括Time to First Byte (TTFB)、 Total BlockTime (TBT) First Contentful Paint (FCP),這是非常好的衡量用戶體驗的指標,很值得我們在測試中進行監(jiān)控。

接下來,給大家介紹幾種常見的衡量頁面性能的方案。

導航和資源加載時間 API

這個API允許你檢索和頁面加載時間相關(guān)的所有事件的時間,比如domComplete time , duration 和 connectEnd。我們可以在測試過程中使用這些指標來檢測網(wǎng)頁性能情況。

1. Performance 得分

我們可以使用Playwright定期檢查頁面性能,確保網(wǎng)頁的性能不低于你設置的某個特定標準。

例如下面的這段代碼,我們可以使用 Playwright 來自動化檢測淘寶網(wǎng)的 domComplete 時間,如果它低于某一個閾值,然后會提醒我們測試用例失敗,這樣我們就可以及時去對頁面做性能回歸。

import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch({
    headless: true,
  });
  const context = await browser.newContext()
  const page = await context.newPage()

  await page.goto('https://www.taobao.com/');
  
  const navigationTimingJson = await page.evaluate(() =>
    JSON.stringify(performance.getEntriesByType('navigation'))
  )
  const navigationTiming = JSON.parse(navigationTimingJson)

  if (navigationTiming.domComplete < 2000) {
    console.error('ERROR: domComplete below 2 seconds')
  }

  await browser.close()
})()

2. 資源加載時間 API

這個API 提供了一種可以讓我們獲取頁面特定資源加載時間的方法,方便我們衡量頁面資源加載時間。

例如,我們可以使用下面這段代碼來檢查淘寶網(wǎng)首頁的webp格式圖片的加載時間。

import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch({
    headless: true,
  });
  const context = await browser.newContext()
  const page = await context.newPage()

  await page.goto('https://www.taobao.com/');
  
  const resourceTimingJson = await page.evaluate(() =>
    JSON.stringify(window.performance.getEntriesByType('resource'))
  )

  const resourceTiming = JSON.parse(resourceTimingJson)
  const logoResourceTiming = resourceTiming.find((element) =>
    element.name.includes('.webp')
  )

  console.log(logoResourceTiming)

  await browser.close()
})()

頁面繪制時間 API

我們可以使用頁面繪制時間 API 來檢索頁面 First Paint (FP)First Contentful Paint (FCP)的時間。

import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch({
    headless: true,
  });

  const context = await browser.newContext()
  const page = await context.newPage()

  await page.goto('https://www.taobao.com/');
  
  const paintTimingJson = await page.evaluate(() =>
    JSON.stringify(window.performance.getEntriesByType('paint'))
  )
  const paintTiming = JSON.parse(paintTimingJson)

  console.log(paintTiming)

  await browser.close()

})()

布局穩(wěn)定性 API

這個API可以提供有關(guān)頁面布局變化的信息,可以用來計算網(wǎng)頁的 Core Web Vital Cumulative Layout Shift (CLS) 數(shù)據(jù)

import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch({
    headless: true,
  });

  const context = await browser.newContext()
  const page = await context.newPage()

  await page.goto('https://www.taobao.com/');
  
  const cummulativeLayoutShift = await page.evaluate(() => {
    return new Promise((resolve) => {
      let CLS = 0

      new PerformanceObserver((l) => {
        const entries = l.getEntries()

        entries.forEach(entry => {
          if (!entry.hadRecentInput) {
            CLS += entry.value
          }
        })

        resolve(CLS)
      }).observe({
        type: 'layout-shift',
        buffered: true
      })
    })
  })

  console.log(parseFloat(cummulativeLayoutShift))

  await browser.close()

})()

Long Task(長任務) API

Long Task API 會返回一個Javascript 執(zhí)行列表,這些列表中的執(zhí)行需要50毫秒才能完成,意味著阻塞了頁面的UI線程,造成頁面卡頓。我們可以用這個API來計算頁面的總阻塞時間 Total Blocking Time (TBT).

例如下面這段代碼,我們使用了 PerformanceObserver 來計算出頁面長任務時間超過50毫秒的時間之和。

import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch({
    headless: true,
  });

  const context = await browser.newContext()
  const page = await context.newPage()

  await page.goto('https://www.taobao.com/');
  

  const totalBlockingTime = await page.evaluate(() => {
    return new Promise((resolve) => {
      let totalBlockingTime = 0
      new PerformanceObserver(function (list) {
        const perfEntries = list.getEntries()
        for (const perfEntry of perfEntries) {
          totalBlockingTime += perfEntry.duration - 50
        }
        resolve(totalBlockingTime)
      }).observe({ type: 'longtask', buffered: true })

      // Resolve promise if there haven't been any long tasks
      setTimeout(() => resolve(totalBlockingTime), 5000)
    })
  })

  console.log(parseFloat(totalBlockingTime))

  await browser.close()

})()

Chrome DevTools Performance

Chrome DevTools 提供了很多非常有用的功能,我們可以充分利用起來。例如,我們可以使用Network.emulateNetworkConditions 來控制瀏覽器網(wǎng)速。

import { chromium } from 'playwright';

(async () => {
  const browser = await chromium.launch({
    headless: true,
  });

  const context = await browser.newContext()
  const page = await context.newPage()

  await page.goto('https://www.taobao.com/');
  
  const context = await browser.newContext()
  const page = await context.newPage()

  await client.send('Network.enable')
  await client.send('Network.emulateNetworkConditions', {
    offline: false,
    downloadThroughput: (5 * 1024 * 1024) / 8,
    uploadThroughput: (4 * 1024 * 1024) / 8,
    latency: 30
  )

  await page.goto('https://testingbot.com/');
  await browser.close()


})()

以上就是Node.js使用Playwright自動化測試頁面性能的詳細內(nèi)容,更多關(guān)于Playwright測試頁面性能的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js中npx命令的使用方法及場景分析

    Node.js中npx命令的使用方法及場景分析

    NPM(Node Package Manager) 是Node.js提供的一個包管理器, 可以使用 NPM 來安裝 node.js 包 ,npm 是從5.2版開始, 增加(自帶)了 npx 命令,本文給大家分享Node.js npx命令使用,需要的朋友一起看看吧
    2021-08-08
  • node.js抓取并分析網(wǎng)頁內(nèi)容有無特殊內(nèi)容的js文件

    node.js抓取并分析網(wǎng)頁內(nèi)容有無特殊內(nèi)容的js文件

    nodejs獲取網(wǎng)頁內(nèi)容綁定data事件,獲取到的數(shù)據(jù)會分幾次相應,如果想全局內(nèi)容匹配,需要等待請求結(jié)束,在end結(jié)束事件里把累積起來的全局數(shù)據(jù)進行操作,本文給大家介紹node.js抓取并分析網(wǎng)頁內(nèi)容有無特殊內(nèi)容的js文件,需要的朋友參考下
    2015-11-11
  • 使用node.js實現(xiàn)接口步驟詳細記錄

    使用node.js實現(xiàn)接口步驟詳細記錄

    這篇文章主要給大家介紹了關(guān)于使用node.js實現(xiàn)接口步驟的相關(guān)資料,對于剛開始不會node寫接口和調(diào)用接口,可以通過這個清晰的初步了解到整個過程,下面需要的朋友可以參考下
    2023-03-03
  • 詳解利用 Express 托管靜態(tài)文件的方法

    詳解利用 Express 托管靜態(tài)文件的方法

    本篇文章主要介紹了詳解利用 Express 托管靜態(tài)文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Node.jsv16 版本安裝的實現(xiàn)

    Node.jsv16 版本安裝的實現(xiàn)

    本文主要介紹了Node.jsv16 版本安裝的實現(xiàn),文中通過圖文示例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • Node.js常用三大模塊之path模塊

    Node.js常用三大模塊之path模塊

    在node.js中常用的三大模塊中還有一個是path模塊,主要是為了便利用戶處理路徑問題,如果我們在引入文件的時候經(jīng)常會受到../和./的干擾,那么這個path模塊將會很好的幫助你
    2022-09-09
  • express框架中使用jwt實現(xiàn)驗證的方法

    express框架中使用jwt實現(xiàn)驗證的方法

    這篇文章主要給大家介紹了關(guān)于express框架中使用jwt實現(xiàn)驗證的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用express具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • Win7系統(tǒng)只能安裝的nodejs13.14,如何安裝高版本nodejs

    Win7系統(tǒng)只能安裝的nodejs13.14,如何安裝高版本nodejs

    正常情況下,Win7支持的Node.js最高版本是V13.14,但在開發(fā)過程中,有不少Vue項目或其他需要依賴Node環(huán)境的項目,對Node版本要求都比較高,對此,我們要么重裝操作系統(tǒng)到Win8以上,要么就得想辦法在Win7中安裝高版本的Node,否則很多項目在編譯打包時可能會出現(xiàn)警告信息或失敗
    2024-11-11
  • node操作mysql數(shù)據(jù)庫實例詳解

    node操作mysql數(shù)據(jù)庫實例詳解

    這篇文章主要介紹了node操作mysql數(shù)據(jù)庫,結(jié)合實例形式較為詳細的分析了node操作數(shù)據(jù)庫的連接、增刪改查、事務處理及錯誤處理相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • Nodejs獲取網(wǎng)絡數(shù)據(jù)并生成Excel表格

    Nodejs獲取網(wǎng)絡數(shù)據(jù)并生成Excel表格

    這篇文章主要為大家詳細介紹了Nodejs獲取網(wǎng)絡數(shù)據(jù)并生成Excel表格的具體實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評論