| Package Data | |
|---|---|
| Maintainer Username: | renatomarinho |
| Maintainer Contact: | renato.marinho@s2move.com (Renato Marinho) |
| Package Create Date: | 2017-09-10 |
| Package Last Update: | 2025-11-17 |
| Home Page: | |
| Language: | PHP |
| License: | MIT |
| Last Refreshed: | 2025-11-19 03:00:04 |
| Package Statistics | |
|---|---|
| Total Downloads: | 217 |
| Monthly Downloads: | 217 |
| Daily Downloads: | 18 |
| Total Stars: | 2,462 |
| Total Watchers: | 72 |
| Total Forks: | 291 |
| Total Open Issues: | 15 |
Laravel Page Speed delivers an end-to-end optimization pipeline for Blade-rendered pages and REST APIs with measurable gains in latency, bandwidth, and resiliency.
config/laravel-page-speed.php.data-ps-* guards.Choose the registration pattern that matches your Laravel install:
Laravel 10.x (app/Http/Kernel.php)
Append the middleware inside the web group so the order stays deterministic:
protected $middlewareGroups = [
'web' => [
// ... existing middleware
\VinkiusLabs\LaravelPageSpeed\Middleware\InlineCss::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ElideAttributes::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\InsertDNSPrefetch::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\CollapseWhitespace::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\DeferJavascript::class,
],
];
Laravel 11.x and 12.x (bootstrap/app.php)
Use the middleware configurator introduced in Laravel 11. Extend the existing ->withMiddleware closure:
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: __DIR__.'/../')
// ... existing configuration
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('web', [
\VinkiusLabs\LaravelPageSpeed\Middleware\InlineCss::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ElideAttributes::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\InsertDNSPrefetch::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\CollapseWhitespace::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\DeferJavascript::class,
]);
// keep other group definitions (api, broadcast, etc.) here
})
->create();
Attach only the middleware that fits your API architecture.
Laravel 10.x (app/Http/Kernel.php)
protected $middlewareGroups = [
'api' => [
// ... existing middleware
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiSecurityHeaders::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiResponseCache::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiETag::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiResponseCompression::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiPerformanceHeaders::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiCircuitBreaker::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiHealthCheck::class,
],
];
Laravel 11.x and 12.x (bootstrap/app.php)
Inside the same ->withMiddleware closure from the Web section, append the API stack:
$middleware->appendToGroup('api', [
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiSecurityHeaders::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiResponseCache::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiETag::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiResponseCompression::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiPerformanceHeaders::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiCircuitBreaker::class,
\VinkiusLabs\LaravelPageSpeed\Middleware\ApiHealthCheck::class,
]);
composer require vinkius-labs/laravel-page-speed
php artisan vendor:publish --provider="VinkiusLabs\\LaravelPageSpeed\\ServiceProvider"
Recommended baseline for cached APIs:
LARAVEL_PAGE_SPEED_ENABLE=true
API_CACHE_ENABLED=true
API_CACHE_DRIVER=redis
API_CACHE_TTL=300
API_CACHE_DYNAMIC_TAGS=true
| Metric | Before | After (cache hit) | Delta | |-------------------------------|----------------|-------------------|--------| | Page Size (Blade) | 245 KB | 159 KB | -35% | | First Paint | 1.8 s | 1.2 s | -33% | | API Payload | 15.2 KB | 2.8 KB | -82% | | Average API Latency | 450 ms | 2 ms | -99.6% | | SQL Queries (100-item list) | 35 | 0 | -100% | | Monthly Bandwidth (estimate) | 15 TB | 3 TB | -80% |
Reference scenario: 1M requests/day with a 65% cache hit rate.
X-Response-Time, X-Memory-Usage, X-Cache-Status, X-Circuit-Breaker-State ready for ingestion by Datadog, New Relic, or Prometheus scrapers.skip patterns avoid instrumenting Debugbar, Telescope, Horizon, or custom diagnostic routes.composer test (or docker compose exec app vendor/bin/phpunit) prior to submitting changes.