WEBKT

Lighthouse Node API 实战:编程化性能测试与结果集成

18 0 0 0

为什么选择 Lighthouse Node API?

快速上手:安装与基本使用

进阶配置:自定义测试选项

实战案例:集成到 CI/CD 流水线

结果集成:数据可视化与报告生成

集成到数据可视化工具

集成到报告生成系统

深入探索:Lighthouse 的工作原理

总结

遇到的问题

想必你已经听说过 Lighthouse 了,作为 Google 出品的一款强大的网站性能测试工具,它能帮你全面评估网站的性能、可访问性、最佳实践、SEO 以及 PWA 等多个方面。

但你可能更习惯于在 Chrome DevTools 中使用 Lighthouse,或者通过命令行工具来运行它。今天,咱们来聊点不一样的——Lighthouse Node API,它能让你在 Node.js 环境中以编程的方式使用 Lighthouse,实现更灵活、更强大的性能测试与结果集成。

为什么选择 Lighthouse Node API?

相比于 Chrome DevTools 和命令行工具,Lighthouse Node API 具有以下优势:

  • 灵活性: 你可以完全控制 Lighthouse 的运行方式,自定义测试配置、测试流程,甚至模拟不同的网络环境和设备。
  • 可编程性: 你可以将 Lighthouse 集成到你的自动化测试流程、持续集成/持续部署 (CI/CD) 流水线中,实现性能测试的自动化。
  • 可扩展性: 你可以轻松地将 Lighthouse 的测试结果与各种工具和服务集成,例如数据可视化工具、报告生成系统、监控平台等。

快速上手:安装与基本使用

首先,你需要安装 Lighthouse:

npm install -g lighthouse

然后,创建一个 JavaScript 文件,例如 lighthouse-test.js,并编写以下代码:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
const options = { logLevel: 'info', output: 'html', onlyCategories: ['performance'], port: chrome.port };
const runnerResult = await lighthouse('https://www.example.com', options);
// `.report` 是 HTML/JSON/CSV 格式的测试报告
const reportHtml = runnerResult.report;
console.log('Report is done for', runnerResult.lhr.finalUrl);
console.log('Performance score was', runnerResult.lhr.categories.performance.score * 100);
await chrome.kill();
})();

这段代码做了以下几件事:

  1. 引入 lighthousechrome-launcher 模块。
  2. 使用 chrome-launcher 启动一个无头 Chrome 实例。
  3. 设置 Lighthouse 的运行选项,例如日志级别、输出格式、测试类别和 Chrome 端口。
  4. 调用 lighthouse 函数,传入要测试的 URL 和选项。
  5. 获取测试结果,并输出报告和性能得分。
  6. 关闭 Chrome 实例。

运行这段代码:

node lighthouse-test.js

你会在控制台中看到测试结果,并生成一个 HTML 格式的测试报告。

进阶配置:自定义测试选项

Lighthouse 提供了丰富的配置选项,让你能够根据自己的需求定制测试过程。以下是一些常用的配置选项:

  • onlyCategories:指定要测试的类别,例如 ['performance', 'accessibility', 'best-practices', 'seo', 'pwa']
  • output:指定测试报告的输出格式,可以是 htmljsoncsv
  • logLevel:设置日志级别,可以是 silenterrorinfoverbose
  • emulatedFormFactor:模拟设备类型,可以是 mobiledesktop
  • throttlingMethod:模拟网络节流方法,可以是devtools, provided, or simulate.
  • throttling:自定义网络节流参数,例如 rttMs(往返延迟)、throughputKbps(吞吐量)、requestLatencyMsdownloadThroughputKbpsuploadThroughputKbpscpuSlowdownMultiplier(CPU 减速倍数)等。
  • extraHeaders:设置额外的 HTTP 请求头。
  • precomputedLanternData and lanternData: 使用预先计算的性能数据。
  • budgets:设置性能预算。

例如,以下代码模拟了移动设备在 3G 网络下的测试:

const options = {
onlyCategories: ['performance'],
emulatedFormFactor: 'mobile',
throttlingMethod: 'simulate',
throttling: {
rttMs: 150,
throughputKbps: 1638.4,
cpuSlowdownMultiplier: 4,
},
};

实战案例:集成到 CI/CD 流水线

假设你使用 Jenkins 作为 CI/CD 工具,你可以将 Lighthouse 集成到你的构建流程中,实现每次代码提交后自动运行性能测试。

  1. 在 Jenkins 中安装 Node.js 插件。
  2. 在你的项目中创建一个 package.json 文件,并添加以下依赖:
{
"dependencies": {
"lighthouse": "^9.6.8",
"chrome-launcher": "^0.15.1"
}
}
  1. 创建一个 Jenkinsfile,并添加以下步骤:
pipeline {
  agent any
  stages {
    stage('Checkout') {
      steps {
        checkout scm
      }
    }
    stage('Install') {
      steps {
        sh 'npm install'
      }
    }
    stage('Test') {
      steps {
        sh 'node lighthouse-test.js'
      }
    }
  }
}
  1. 在 Jenkins 中配置你的项目,并指定 Jenkinsfile 的路径。

现在,每次你提交代码时,Jenkins 都会自动运行 Lighthouse 性能测试,并将结果输出到构建日志中。你还可以将测试报告保存为构建产物,方便后续查看。

结果集成:数据可视化与报告生成

Lighthouse Node API 可以生成 JSON 格式的测试报告,你可以将这些数据集成到各种工具和服务中,实现数据可视化和报告生成。

集成到数据可视化工具

你可以使用 Grafana、Kibana 等数据可视化工具,将 Lighthouse 的测试结果以图表的形式展示出来,方便你监控网站的性能变化。

  1. 将 Lighthouse 的 JSON 报告导入到你的数据存储中,例如 Elasticsearch、InfluxDB 等。
  2. 配置数据可视化工具,连接到你的数据存储,并创建相应的图表和仪表盘。

集成到报告生成系统

你可以使用 Node.js 的报告生成库,例如 lighthouse-reporter,将 Lighthouse 的 JSON 报告转换成更友好的 HTML 或 PDF 格式。
或者使用lighthouse-ci工具生成报告。

  1. 安装 lighthouse-ci
npm install -g @lhci/cli
  1. 创建配置文件.lighthouserc.js。
  2. 运行。
lhci autorun

深入探索:Lighthouse 的工作原理

Lighthouse 通过模拟用户与网页的交互,收集各种性能指标,并根据预定义的规则进行评分。它主要关注以下几个方面:

  • 首次内容绘制 (FCP): 衡量用户首次看到页面内容的时间。
  • 首次有效绘制 (FMP): 衡量用户首次看到页面主要内容的时间。
  • 速度指数 (SI): 衡量页面加载速度的综合指标。
  • 可交互时间 (TTI): 衡量页面达到完全可交互状态的时间。
  • 最大内容绘制 (LCP): 衡量视口中最大的内容元素何时可见。
  • 累积布局偏移 (CLS): 衡量页面布局的稳定性。

Lighthouse 会根据这些指标的得分,给出相应的优化建议,帮助你改进网站的性能。

总结

Lighthouse Node API 为开发者提供了一种强大的工具,让你能够在 Node.js 环境中以编程的方式进行性能测试,并将其集成到你的开发流程和各种工具中。通过合理利用 Lighthouse Node API,你可以更好地监控和优化网站的性能,提升用户体验。

遇到的问题

使用过程中,可能会遇到Error: No Chrome installations found.错误,这是因为chrome-launcher无法找到 Chrome 安装位置。
解决方法是:

  1. 通过launch()方法的chromePath参数设置。例如:const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'], chromePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' });
  2. 设置环境变量CHROME_PATH
技术小能手 LighthouseNode.js性能测试

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/8546