亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Node.js使用Playwright自動(dòng)化測(cè)試頁(yè)面性能

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

概要

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

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

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

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

接下來(lái),給大家介紹幾種常見(jiàn)的衡量頁(yè)面性能的方案。

導(dǎo)航和資源加載時(shí)間 API

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

1. Performance 得分

我們可以使用Playwright定期檢查頁(yè)面性能,確保網(wǎng)頁(yè)的性能不低于你設(shè)置的某個(gè)特定標(biāo)準(zhǔn)。

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

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. 資源加載時(shí)間 API

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

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

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()
})()

頁(yè)面繪制時(shí)間 API

我們可以使用頁(yè)面繪制時(shí)間 API 來(lái)檢索頁(yè)面 First Paint (FP)First Contentful Paint (FCP)的時(shí)間。

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

這個(gè)API可以提供有關(guān)頁(yè)面布局變化的信息,可以用來(lái)計(jì)算網(wǎng)頁(yè)的 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(長(zhǎng)任務(wù)) API

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

例如下面這段代碼,我們使用了 PerformanceObserver 來(lái)計(jì)算出頁(yè)面長(zhǎng)任務(wù)時(shí)間超過(guò)50毫秒的時(shí)間之和。

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 提供了很多非常有用的功能,我們可以充分利用起來(lái)。例如,我們可以使用Network.emulateNetworkConditions 來(lái)控制瀏覽器網(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自動(dòng)化測(cè)試頁(yè)面性能的詳細(xì)內(nèi)容,更多關(guān)于Playwright測(cè)試頁(yè)面性能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js中npx命令的使用方法及場(chǎng)景分析

    Node.js中npx命令的使用方法及場(chǎng)景分析

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

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

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

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

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

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

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

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

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

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

    在node.js中常用的三大模塊中還有一個(gè)是path模塊,主要是為了便利用戶處理路徑問(wèn)題,如果我們?cè)谝胛募臅r(shí)候經(jīng)常會(huì)受到../和./的干擾,那么這個(gè)path模塊將會(huì)很好的幫助你
    2022-09-09
  • express框架中使用jwt實(shí)現(xiàn)驗(yàn)證的方法

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

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

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

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

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

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

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

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

最新評(píng)論