/laravel-page-speed

Package to optimize your site automatically which results in a 35%+ optimization

Primary LanguagePHPMIT LicenseMIT

Laravel Page Speed

Project on GitScrum Build Status License Latest Stable Version Total Downloads

Simple package to minify HTML output on demand which results in a 35%+ optimization.

Installation

You can install the package via composer:

$ composer require renatomarinho/laravel-page-speed

Laravel 5.5 and up

Laravel 5.5 and up uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.

Laravel 5.4 or 5.3

Add the Service Provider to the providers array in config/app.php:

RenatoMarinho\LaravelPageSpeed\ServiceProvider::class

This is required for publishing the configuration file:

Publish configuration file

php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider"

Do not forget to register middlewares

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,
]

Before

Before of Laravel Page Speed

After

After of Laravel Page Speed

Roadmap : Filters

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

Configuration

After installing package, you may need to configure some options.

Disable Service

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),

Skip routes

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.

Warning

\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.

Testing

$ composer test

Contributing

Please see CONTRIBUTING for details.

Credits

Inspiration

License

The MIT License (MIT). Please see License File for more information.