The Performance package helps you inspect how a page behaves in a real browser by extracting Core Web Vitals and network timing data with a single API.
- Capture all Core Web Vitals directly from the browser with resilient fallbacks:
- LCP (Largest Contentful Paint) - Loading performance
- FCP (First Contentful Paint) - Initial render timing
- CLS (Cumulative Layout Shift) - Visual stability
- INP (Interaction to Next Paint) - Responsiveness (Core Web Vital as of 2024)
- FID (First Input Delay) - Input responsiveness
- TTFB (Time to First Byte) - Server response time
- TBT (Total Blocking Time) - Main thread blocking
- Collect resource timing entries and expose them as value objects for downstream analysis.
composer require --dev playwright-php/performanceuse Playwright\Performance\Monitor\PerformanceMonitor;
use Playwright\Playwright;
$browser = Playwright::chromium();
$page = $browser->newPage();
$monitor = new PerformanceMonitor($page);
$monitor->navigate('https://example.com');
$resources = $monitor->collectResourceMetrics();
// Core Web Vitals
$vitals = $monitor->collectCoreWebVitals();
// Resource Metrics
$resources = $monitor->collectResourceMetrics();
$browser->close();// ...
// $vitals = $monitor->collectCoreWebVitals();
echo $vitals->lcp; // Largest Contentful Paint (ms)
echo $vitals->fcp; // First Contentful Paint (ms)
echo $vitals->cls; // Cumulative Layout Shift
echo $vitals->inp; // Interaction to Next Paint (ms)
echo $vitals->fid; // First Input Delay
echo $vitals->ttfb; // Time to First Byte (ms)
echo $vitals->tbt; // Total Blocking Time (ms)// ...
// $resources = $monitor->collectResourceMetrics();
foreach ($resources as $resource) {
echo $resource->toArray();
}use Playwright\Performance\Reporter\JsonReporter;
use Playwright\Performance\Reporter\MarkdownReporter;
// ...
// $resources = $monitor->collectResourceMetrics();
// JSON (default)
$reporter = new JsonReporter();
file_put_contents('report.json', $reporter->generate($vitals, $resources));
// Markdown
$reporter = new MarkdownReporter();
file_put_contents('report.md', $reporter->generate($vitals, $resources));Use MockPerformanceMonitor to test your code without launching a browser:
use Playwright\Performance\Monitor\MockPerformanceMonitor;
use Playwright\Performance\Metrics\CoreWebVitals;
class MyServiceTest extends TestCase
{
public function testPerformanceCheck(): void
{
$mock = new MockPerformanceMonitor();
// Define expected values (optional)
$mock->setCoreWebVitals(new CoreWebVitals(100.0, 50.0, 0.01, 0.0, 0.0, 80.0, 0.0));
$service = new MyService($mock);
// No real browser is launched here
$service->analyzePerformance('https://example.com');
}
}The package also includes a PHPUnit trait with performance assertions. See the full documentation for details.
This package is released by the Playwright PHP project under the MIT License. See the LICENSE file for details.
