/dashboard
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.
# 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;
# No gzip / Brotli block in nginx.conf
# Responses delivered uncompressed — 3-5x larger than necessary
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.
// Lazy-load route-specific JS
const Dashboard = () => import('./Dashboard.js');
// Or use @vite directive in Blade
@vite(['resources/js/app.js'])
<!-- Loading the entire bundle on every page -->
<script src="/build/everything.js"></script>
<script src="/build/assets/app-abc.js"></script>
main > section.hero > img
<img src="/images/hero.jpg" loading="eager">
|
Type
|
Count
|
Size
|
|---|---|---|
| script | 6 | 598 KB |
| stylesheet | 4 | 115 KB |
| image | 24 | 346 KB |
| font | 1 | 62 KB |
| document | 1 | 37 KB |
|
Entity
|
Transfer
|
Blocking
|
Main thread
|
|---|---|---|---|
| Google Analytics | 23 KB | 60ms | 100ms |
|
URL
|
Type
|
Size
|
Duration
|
|---|---|---|---|
vendor.js
|
371 KB | ||
products
|
24 KB |
app.js
336ms
vendor.js
208ms