You can install the package via composer:
$ composer require renatomarinho/laravel-page-speed
Laravel 5.5 and up uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.
Add the Service Provider to the providers array in config/app.php:
RenatoMarinho\LaravelPageSpeed\ServiceProvider::class
This is required for publishing the configuration file:
php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider"
Next, the \RenatoMarinho\LaravelPageSpeed\Middleware\CollapseWhitespace::class
and other middleware must be registered in the kernel:
//app/Http/Kernel.php
protected $middleware = [
...
\RenatoMarinho\LaravelPageSpeed\Middleware\InlineCss::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\ElideAttributes::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\InsertDNSPrefetch::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveComments::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\TrimUrls::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveQuotes::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\CollapseWhitespace::class,
]
Name | Description | Available |
inline_css | Inlines small external CSS files | YES |
elide_attributes | Removes unnecessary attributes in HTML tags | YES |
insert_dns_prefetch | Injects tags in the HEAD to enable the browser to do DNS prefetching | YES |
remove_quotes | Removes unnecessary quotes in HTML tags | YES |
trim_urls | Removes unnecessary prefixes from URLs | YES |
collapse_whitespace | Removes unnecessary whitespace in HTML | YES |
remove_comments | Removes HTML comments | YES |
combine_css | Combines multiple CSS files into one | NO |
combine_heads | Combines multiple elements into one | NO |
combine_javascript | Combines multiple JavaScript files into one | NO |
dedup_inlined_images | Replaces repeated inlined images with JavaScript that loads the data from the first instance of the image | NO |
defer_javascript | Defers the execution of javascript in the HTML | NO |
pedantic | Adds default type attributes to script and style tags that are missing them | NO |
extend_cache | Improves cacheability | NO |
fallback_rewrite_css_urls | Rewrite URLs in CSS even if CSS is not parseable | NO |
flatten_css_imports | Flattens @import rules in CSS by replacing the rule with the contents of the imported resource | NO |
hint_preload_subresources | Inserts link: headers to preload CSS and JavaScript resources | NO |
inline_google_font_css | Inlines small font-loading CSS from Google Fonts API | NO |
inline_import_to_link | Inlines style tags comprising only CSS @imports by converting them to an equivalent link | NO |
inline_javascript | Inlines small external Javascript files | NO |
inline_preview_images | Delays original images; serves inlined, low-quality placeholder images until originals are loaded | NO |
insert_ga | Inserts Google Analytics javascript snippet | NO |
lazyload_images | Loads images when they become visible in the client viewport | NO |
local_storage_cache | Loads inlined CSS and image resources into HTML5 local storage whence the client fetches them subsequently rather than the server sending them again | NO |
make_show_ads_async | Converts synchronous Google AdSense tags to asynchronous format | NO |
make_google_analytics_async | Converts synchronous Google Analytics code to load asynchronously | NO |
move_css_above_scripts | Moves CSS above scripts | NO |
move_css_to_head | Moves CSS into the element | NO |
outline_css | Moves large inline 'style' tags into external files for cacheability | NO |
outline_javascript | Moves large inline 'script' tags into external files for cacheability | NO |
prioritize_critical_css | Instruments the page, inlines its critical CSS at the top, and lazily loads the rest | NO |
resize_mobile_images | Just like inline_preview_images, but uses smaller placeholder images for mobile browsers | NO |
resize_rendered_image_dimensions | Resize images to rendered dimensions | NO |
responsive_images | Serve responsive images using the srcset attribute | NO |
rewrite_css | Minifies CSS | NO |
rewrite_images | Rescales, and compresses images; inlines small ones | NO |
rewrite_javascript | Minifies Javascript | NO |
rewrite_style_attributes | Rewrite the CSS in style attributes by applying the configured rewrite_css filter to it | NO |
rewrite_style_attributes_with_url | Rewrite the CSS in style attributes by applying the configured rewrite_css filter to it, but only if the attribute contains the text 'url(' | NO |
sprite_images | Sprites images | NO |
After installing package, you may need to configure some options.
You would probably like to set up the local environment to get a readable output.
//config/laravel-page-speed.php
//Set this field to false to disable the laravel page speed service.
'enable' => env('LARAVEL_PAGE_SPEED_ENABLE', true),
You would probably like to configure the package to skip some routes.
//config/laravel-page-speed.php
//You can use * as wildcard.
'skip' => [
'*.pdf', //Ignore all routes with final .pdf
'*/downloads/*',//Ignore all routes that contain 'downloads'
'assets/*', // Ignore all routes with the 'assets' prefix
];
By default this field comes configured with some options, so feel free to configure according to your needs...
Notice: This package skip automatically 'binary' and 'streamed' responses. See File Downloads.
\RenatoMarinho\LaravelPageSpeed\Middleware\TrimUrls::class is considered medium risk. It can cause problems if it uses the wrong base URL. This can happen, for example, if you serve HTML that will be pasted verbatim into other HTML pages. If URLs are trimmed on the first page, they will be incorrect for the page they are inserted into. In this case, just disable the middleware.
$ composer test
Please see CONTRIBUTING for details.
- Renato Marinho
- João Roberto P. Borges
- Caneco (for the logo)
- All Contributors
Mod Page Speed (https://www.modpagespeed.com/)
The MIT License (MIT). Please see License File for more information.