首页 > 编程问答 >如何使用带有 typescript 的 playwright 查找 react 应用程序的 LCP?

如何使用带有 typescript 的 playwright 查找 react 应用程序的 LCP?

时间:2024-05-31 11:26:18浏览次数:20  
标签:reactjs typescript playwright largest-contentful-paint

需要获取使用 playwright 和 typescript 的 react 应用程序的最大 Contentful 画面

这是用于网络性能测试的,应该是精确的值

我尝试了 https://web.dev/articles/lcp#measure-lcp-in-javascript 并使用 Typescript 实现了相同的功能

但是我们需要知道,我们是否还有其他东西

 return page.evaluate(() => {
    return new Promise<PerformancePaintTiming>((resolve) => {
      new PerformanceObserver((entryList) => {
        const lcpEntry = entryList.getEntries().find(entry => entry.entryType === 'largest-contentful-paint');
        if (lcpEntry) resolve(lcpEntry as PerformancePaintTiming);
      }).observe({ type: 'largest-contentful-paint', buffered: true });
    });
  });

你尝试的方法来测量 Largest Contentful Paint (LCP) 使用 PerformanceObserver 是正确的,并且是获取这个指标的推荐方法。但是,有一些 Playwright 特定的技巧可以帮助你更可靠、准确地获得这个数值:

1. 使用 page.waitForLoadState 确保页面加载完成

PerformanceObserver 会在页面加载过程中报告 LCP 值的变化。为了确保你获取的是最终的 LCP 值,你需要等待页面加载完成。可以使用 Playwright 的 page.waitForLoadState 方法来做到这一点:

await page.goto('https://your-react-app.com');
await page.waitForLoadState('networkidle'); // 或者 'load',取决于你的应用

const lcp = await page.evaluate(() => {
  return new Promise<PerformancePaintTiming>((resolve) => {
    new PerformanceObserver((entryList) => {
      const lcpEntry = entryList.getEntries().find(entry => entry.entryType === 'largest-contentful-paint');
      if (lcpEntry) resolve(lcpEntry as PerformancePaintTiming);
    }).observe({ type: 'largest-contentful-paint', buffered: true });
  });
});

console.log(lcp.startTime + lcp.duration); // 打印 LCP 时间戳

2. 使用 page.metrics 获取更全面的性能指标

Playwright 的 page.metrics 方法可以提供更全面的性能指标,包括 LCP。这个方法返回一个包含各种指标的对象,例如:

const metrics = await page.metrics();
console.log(metrics.LargestContentfulPaint); // 打印 LCP 时间戳

3. 注意缓存的影响

浏览器缓存会影响 LCP 值。为了获得更准确的测试结果,你需要在每次测试前清除浏览器缓存,或者使用 Playwright 的隐身模式。

4. 进行多次测试并取平均值

网络条件和服务器负载会影响 LCP 值。为了获得更可靠的结果,建议进行多次测试并取平均值。

总结

使用 PerformanceObserver 结合 Playwright 的 page.waitForLoadStatepage.metrics 方法可以帮助你准确地测量 React 应用的 LCP。同时,需要注意缓存的影响并进行多次测试以获得更可靠的结果。

标签:reactjs,typescript,playwright,largest-contentful-paint
From: 78557970

相关文章

  • TypeScript error TS2345 All In One
    TypeScripterrorTS2345AllInOneerrorTS2345:Argumentoftype'number'isnotassignabletoparameteroftype'string'.errorsfunctiondailyTemperatures(temperatures:number[]):number[]{//❌errorTS2345:Argumentoftype......
  • Python库之Playwright简介、安装、使用方法详细攻略
    Python库之Playwright简介、安装、使用方法详细攻略引言在自动化测试领域,Playwright是一个强大的库,它支持无头浏览器自动化,允许开发者在多种浏览器上进行网页自动化操作。Playwright由微软开发,支持Chromium、Firefox和WebKit,能够模拟真实用户的浏览器行为。Playwright简......
  • 当通过 target="_blank" 链接打开新页面时,Playwright 会截取错误页面的截图
    我在使用Playwright时遇到了一个问题,它截取了错误页面的屏幕截图。当通过target="_blank"链接打开新页面时,它不会截取最新页面,而是截取旧页面的屏幕截图。我的应用程序的业务逻辑主要包含在一个while循环中,而且我没有使用Playwright进行测试。我尝试了两种方法来解决这个......
  • ts拯救前端:优雅的在运行时校验后端接口返回数据类型 typescript-json-schema+ ajv
    包管理器:pnpm环境:node依赖:typescript-json-schema、ajv准备工作1、安装依赖pnpmaddtypescript-json-schemapnpmaddajv2、准备需要校验的数据类型//userType.tsexportinterfaceUser{id:string;token:string;nick?:string;}3、使用typescrip......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-49-Route类拦截修改请求-下篇
    1.简介 在日常工作和学习中,自动化测试的时候:在加载页面时,可能页面出现很多不是很重要或者不是我们所关注的,这个时候我们就可以选择不加载这些内容,以提高页面加载速度,节省资源。例如:可能页面上图片比较多,而我们又不关心图片内容。那么,在加载页面时,可以选择不加载图片,以提高页面加......
  • 干货分享:Vue 3和TypeScript结合进行API封装
    前言:  在现代的前端开发中,使用Vue3和TypeScript结合进行API封装已经成为一种流行的实践。通过将Vue3的响应式性与TypeScript的静态类型检查相结合,我们可以更加安全和高效地管理和使用接口请求。本文将介绍如何在Vue3项目中使用TypeScript进行API封装,以提高代码质量、可......
  • TypeScript中的`let`、`const`、`var`区别:变量声明的规范与实践
    TypeScript中的let、const、var区别:变量声明的规范与实践引言在TypeScript中,变量声明是代码编写的基础部分。let、const、var是三种用于变量声明的关键字,它们各自有不同的作用域规则和可变性特点。基础知识作用域:变量可以在整个文件(全局作用域)或某个特定代码块(局部作用......
  • 「TypeScript系列」TypeScript 类/类继承
    文章目录一、TypeScript类二、TypeScript类继承三、TypeScript类-关键字四、TypeScript类-运算符五、TypeScript类-重写(Override)六、TypeScript类-访问控制修饰符1.public2.private3.protected七、TypeScript类和接口1.类(Classes)2.接口(Interfaces)八......
  • TypeScript 学习笔记(十一):TypeScript 与微服务架构的结合应用
    TypeScript学习笔记(十一):TypeScript与微服务架构的结合应用1.引言在前几篇学习笔记中,我们探讨了TypeScript的基础知识、前后端框架的结合应用、测试与调试技巧、数据库以及GraphQL的结合应用。本篇将重点介绍TypeScript与微服务架构的结合应用,包括如何使用TypeSc......
  • TypeScript 学习笔记(十二):TypeScript 与 DevOps 的结合应用
    TypeScript学习笔记(十二):TypeScript与DevOps的结合应用1.引言在前几篇学习笔记中,我们探讨了TypeScript的基础知识、前后端框架的结合应用、测试与调试技巧、数据库、GraphQL以及微服务架构的结合应用。本篇将重点介绍TypeScript与DevOps的结合应用,包括如何在D......