Frontend Performance Testing is Hard
John Hill
About me
In this talk
Browser Performance and DevTools
Load Testing and Perf Problems
What to Measure
Browserless
Driving with Puppeteer
js-perf-toolkit
Browser Performance
"Load" Times
User Experience
Clientside Resource Management
Meetup.com
Capture HAR
k6.io
Open Source Load Testing
Runs on golang
Tests written in JS
Strong Ecosystem
(Bought by Grafana)
Export as InfluxDB
Run HAR with k6.io
"Load Testing"
What most people call performance testing
HTTP Traffic that simulates a user (browser)
Black Friday
SEO Problem
LighthouseCI
Built into DevTools
Performance and SEO
Lighthouse CI (automation)
DEMO
What happens after load?
What do we really want to measure?
What do we really want to measure on the client?
CPU
Long Tasks API - What's creating >50ms "freezing"
Overall
Memory
Leaks - Heapdump
Overall Usage
User Experience
Marks API
How long does it take for a user to complete a journey
Selenium?
Yes? No? Maybe?
Variability in results due to waitFor
Jmeter+Selenium
2 Cores per User!
Out of Date
"Chrome as a service"
Chrome + essentials in a container. Hard.
Debugger!
Drivers like Selenium (4.0), Puppeteer and Playwright
Perf MeasurementLighthouse, prom-client, heapdump
Control and Measure utilization with cgroups
Demo
Puppeteer/Playwright
"Official" Chrome Support
Connects to chrome with native CDP
Access to Chrome's internals
Execute tests and capture perf metrics along the way
JS-Perf-Toolkit
github.com/unlikelyzero/js-perf-toolkit
Moves everything into containers
k6 and browserless
Puppeteer/Playwright Examples
Integrates into monitoring systems with InfluxDB and Prometheus
Imagination
Demo
Summary
Browser Performance and DevTools
Load Testing and Perf Problems
What to Measure
Browserless
Driving with Puppeteer
js-perf-toolkit