Laravel Vitals
Toggle theme
audit · May 3, 12:01
/products

product

desktop · Sun, May 3, 2026 12:01 PM ·
demo
Perf
B
83/100
Global
A
91/100
Performance
Lighthouse Performance score
B
-2 vs prev
Accessibility
Lighthouse Accessibility score
A
+9 vs prev
Best Practices
Lighthouse Best Practices score
B
-15 vs prev
SEO
Lighthouse SEO score
A
-1 vs prev

Core Web Vitals

LCP
Largest Contentful Paint — time until the largest visible content element is rendered. Good = under 2.5s.
2453ms
Largest Contentful Paint
CLS
Cumulative Layout Shift — how much visible content unexpectedly shifts during load. Good = under 0.1.
0.09
Cumulative Layout Shift
INP
Interaction to Next Paint — latency between user input and the next paint. Good = under 200ms.
252ms
Interaction to Next Paint
TTFB
Time to First Byte — how long the server takes to respond with the first byte. Good = under 800ms.
339ms
Time to First Byte

Front-end ↔ Back-end breakdown

LCP composition 2453ms total
frontend 2114ms (86.2%)

Backend telemetry

Queries
8 (21 unique)
Query time
293ms
Memory peak
72.0MB
Cache hit rate
92%

Recommendations

2

performance

Efficiently encode images

Info
View all occurrences

Unoptimized images contain redundant data. Compress them to improve LCP.

Unoptimized JPEG/PNG images contain metadata and redundant pixel data. Lossless or lossy compression can cut size 30-60% with no perceptible quality difference — directly improving LCP.

Typical savings: 30-70% image size, significant LCP improvement on image-heavy pages
Recommended
// Intervention Image v3 — optimize on upload
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

$manager = new ImageManager(new Driver());
$manager->read($path)
    ->toWebp(quality: 80)
    ->save(storage_path('app/public/images/hero.webp'));
Avoid
// Storing raw upload with no compression
$request->file('image')->store('images'); // may be a 4 MB JPEG

Reduce unused JavaScript

Warning
View all occurrences

JavaScript shipped to the browser but never executed wastes bandwidth and parse time.

Unused JavaScript still costs network bandwidth, parse time, and CPU. The browser must download, parse, and compile every byte you ship — even if it never executes.

Typical savings: 30-60% bundle size, 200-500ms LCP improvement
Recommended
// Lazy-load route-specific JS
const Dashboard = () => import('./Dashboard.js');

// Or use @vite directive in Blade
@vite(['resources/js/app.js'])
Avoid
<!-- Loading the entire bundle on every page -->
<script src="/build/everything.js"></script>
Found in your application
resources/views/product.blade.php:12
<script src="/build/assets/app-abc.js"></script>
Hint: Use @vite([...]) instead.

Page details

Page weight
1,273 KB
HTTP requests
27
DOM elements
1,003
Render-blocking
266ms
LCP element
main > section.hero > img <img src="/images/hero.jpg" loading="eager">

Resource breakdown

Type
Count
Size
script 11 733 KB
stylesheet 4 77 KB
image 22 735 KB
font 4 107 KB
document 1 10 KB

Third-party impact

1
Entity
Transfer
Blocking
Main thread
Google Analytics 23 KB 60ms 100ms

Main thread breakdown

Slowest requests

URL
Type
Size
Duration
vendor.js
Script
371 KB
497ms
products
XHR
24 KB
240ms

Diagnostics

Critical request chain depth
3 levels
Top JS execution costs
  • app.js 240ms
  • vendor.js 143ms
Open Vitals Spotlight (Cmd+K)
Open Vitals Spotlight (Ctrl+K)
Type at least 2 characters to search
↑↓ Navigate Open
0 results