Browsertime
Browsertime:测量和优化Web性能
Browsertime是一个强大的开源Node.js工具,专为构建自己的性能测量工具的工程师设计。它是sitespeed.io等项目的核心引擎,也是Mozilla用来测量Firefox性能的可信工具。
目录
主要特性
-
强大的性能测试: Browsertime允许你对网页进行全面的性能测试,包括页面加载时间、资源加载和用户交互。
-
深入的指标: 获取广泛的性能指标,如页面加载时间、视觉指标(屏幕上的内容何时绘制)、最大内容绘制(LCP)等,帮助你找出需要改进的地方。
-
脚本功能: 使用JavaScript脚本自定义测试和用户交互,实现高级场景和详细分析。
-
Docker支持: 通过Docker支持,轻松将Browsertime集成到你的CI/CD流程和容器化环境中。
安装
如果你是一名从事性能测量工具开发的工程师,或者只是想利用Browsertime的强大功能来满足你的Web性能需求,请按照以下安装和使用说明进行操作。
NodeJS
npm install -g browsertime
browsertime https://example.com
Docker
docker run --rm -v "$(pwd)":/browsertime sitespeedio/browsertime https://www.sitespeed.io/
使用方法
无论你的经验水平如何,Browsertime的设计都易于使用。以下是快速入门指南。
基本用法
browsertime https://www.example.com --browser chrome
此命令将使用Chrome测试https://www.example.com。
高级选项
Browsertime提供了多种高级选项,用于更详细的分析,例如指定运行次数、选择浏览器或设置自定义指标。以下是一些示例:
多次运行测试
browsertime -n 5 https://www.example.com
指定不同的浏览器
browsertime --browser firefox https://www.example.com
自定义指标
browsertime --script "return {'myMetric': window.myApp.customMetric}" https://www.example.com
要查看完整的选项列表,请运行$ browsertime --help
,你可以看到配置选项。
网络连接
你可以限制连接速度,使连接变慢,从而更容易捕捉到性能退化。最好的方法是在Docker中设置网络桥接或使用我们的连接引擎Throttle。在文档中阅读更多关于如何操作的信息。
脚本中导航
如果你需要更复杂的测试场景,可以定义自己的(Selenium)测试脚本来进行测试。当你想测试已登录用户的页面、登录页面或向购物车添加商品时,请使用自己的测试脚本。
我们在文档中有一整节关于脚本编写的内容。
在移动设备上测试
Browsertime支持Android上的Chrome和Firefox:收集SpeedIndex、HAR和视频!
如果你想设置连接,你需要使用类似gnirehtet的工具。在这里阅读更多信息。
$ browsertime --chrome.android.package com.android.chrome https://www.sitespeed.io --video --visualMetrics
使用WebPageReplay
我们的Docker容器现在包含WebPageReplay。
WebPageReplay允许你在本地重放页面(消除服务器延迟),使发现前端性能退化变得更容易。
它的工作原理如下:
- 启动脚本以记录模式启动WebPageReplay
- 然后启动Browsertime访问你选择的URL一次(以便记录)
- 关闭WebPageReplay
- 以重放模式启动WebPageReplay
- Browsertime访问URL多次(你选择的次数)
- 关闭重放模式的WebPageReplay
你可以通过设置Docker环境变量来改变延迟。使用REPLAY来开启重放功能。
默认浏览器是Chrome:
docker run --cap-add=NET_ADMIN --rm -v "$(pwd)":/browsertime -e REPLAY=true -e LATENCY=100 sitespeedio/browsertime:20.0.0 https://en.wikipedia.org/wiki/Barack_Obama
使用Firefox:
docker run --cap-add=NET_ADMIN --rm -v "$(pwd)":/browsertime -e REPLAY=true -e LATENCY=100 sitespeedio/browsertime:20.0.0 -b firefox -n 11 --firefox.acceptInsecureCerts true https://en.wikipedia.org/wiki/Barack_Obama
在Android手机上使用Chrome。这只适用于Linux,因为你需要能够在Docker中挂载usb端口:
docker run --privileged -v /dev/bus/usb:/dev/bus/usb -e START_ADB_SERVER=true --cap-add=NET_ADMIN --rm -v "$(pwd)":/browsertime -e REPLAY=true -e LATENCY=100 sitespeedio/browsertime https://en.m.wikipedia.org/wiki/Barack_Obama --android --chrome.args ignore-certificate-errors-spki-list=PhrPvGIaAMmd29hj8BCZOq096yj7uMpRNHpn5PDxI6I= -n 11 --chrome.args user-data-dir=/data/tmp/chrome
速度指数和视频
运行我们现成的Docker容器是最简单的方法来录制视频和计算速度指数,因为这样您可以免费获得运行VisualMetrics所需的所有依赖项。
默认的视频将包含一个计时器,并显示指标发生的时间,但您可以使用--video.addTimer false
来关闭它。
浏览器支持
Browsertime支持桌面上的Firefox、Chrome和Edge(Chromium版本),以及Mac OS上的Safari。在Android上,我们支持Chrome和Firefox。iOS上的Safari支持有限:没有HAR文件和视觉指标。您也可以在Mac OS上使用Safari模拟器。
工作原理
Browsertime使用Selenium NodeJS来驱动浏览器。它启动浏览器,加载URL,执行可配置的JavaScript来收集指标,收集HAR文件。
为了从Firefox获取HAR,我们使用HAR Export Trigger,而对于Chrome,我们使用Chrome-HAR来解析时间线日志并生成HAR文件。
贡献
我们欢迎社区的贡献!无论是修复bug、添加功能还是改进文档,您的帮助都很有价值。以下是您可以贡献的方式:
- 创建问题:创建一个问题并与我们讨论如何实施。
- Fork和克隆:Fork仓库并在本地克隆。
- 创建分支:为您的功能或bug修复创建一个新分支。
- 开发:进行更改。确保遵守编码标准,如果适用,请编写测试。
- 测试:运行测试以确保一切按预期工作。
- 提交拉取请求:将您的更改推送到您的fork,并向主仓库提交拉取请求。
在贡献之前,请阅读我们的CONTRIBUTING.md以获取有关如何贡献的更详细信息。
报告问题
发现了bug或有功能请求?请使用GitHub Issues来报告。请务必检查现有问题以避免重复。
社区和支持
加入我们的社区!无论您需要帮助、想分享经验还是讨论潜在的改进,都有几种方式可以参与:
- Slack:在Slack上与其他用户和开发团队联系。
- GitHub Issues:对于技术问题、功能请求和bug报告,请使用我们的GitHub issues。
- RSS/更新日志:最新版本和信息始终可以在我们的RSS feed和更新日志中找到。
- Mastodon:在Mastodon上关注我们https://fosstodon.org/@sitespeedio。
我们很高兴有您加入我们的社区,期待您的贡献和互动!