Laravel Vitals
Toggle theme
audit · Apr 27, 12:43
/

home

mobile · Mon, Apr 27, 2026 12:43 PM ·
demo
Perf
A
92/100
Global
A
92/100
Performance
Lighthouse Performance score
A
Accessibility
Lighthouse Accessibility score
B
Best Practices
Lighthouse Best Practices score
A
SEO
Lighthouse SEO score
A

Core Web Vitals

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

Front-end ↔ Back-end breakdown

LCP composition 1764ms total
frontend 1585ms (89.9%)

Backend telemetry

Queries
19 (14 unique)
Query time
99ms
Memory peak
29.0MB
Cache hit rate
100%

Recommendations

3

performance

Enable text compression

Info
View all occurrences

Compress text-based responses with gzip or Brotli to reduce transfer size significantly.

Text-based resources (HTML, CSS, JS, JSON) compress 60-80% with gzip and even better with Brotli. Without compression every byte travels over the wire as-is, slowing FCP and LCP directly.

Typical savings: 60-80% transfer size on JS/CSS, 150-400ms LCP improvement
Recommended
# nginx — enable gzip + Brotli
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_min_length 1024;

# Brotli (ngx_brotli module)
brotli on;
brotli_types text/plain text/css application/javascript;
Avoid
# No gzip / Brotli block in nginx.conf
# Responses delivered uncompressed — 3-5x larger than necessary

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/home.blade.php:12
<script src="/build/assets/app-abc.js"></script>
Hint: Use @vite([...]) instead.

seo

Meta description present

Warning
View all occurrences

A meta description improves click-through rate in search results.

Page details

Page weight
840 KB
HTTP requests
44
DOM elements
818
Render-blocking
277ms
LCP element
main > section.hero > img <img src="/images/hero.jpg" loading="eager">

Resource breakdown

Type
Count
Size
script 12 709 KB
stylesheet 4 140 KB
image 12 272 KB
font 4 62 KB
document 1 25 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
425ms
products
XHR
24 KB
186ms

Diagnostics

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