Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yard77/laravel-tachyon
Turbo-boost page load speeds with HTML minification and optimization.
https://github.com/yard77/laravel-tachyon
alpine dns-prefetch html-minification laravel laravel-package livewire page-loading-speed performance-optimization user-experience
Last synced: about 2 months ago
JSON representation
Turbo-boost page load speeds with HTML minification and optimization.
- Host: GitHub
- URL: https://github.com/yard77/laravel-tachyon
- Owner: yard77
- License: mit
- Fork: true (renatomarinho/laravel-page-speed)
- Created: 2023-08-01T17:47:54.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-26T21:00:53.000Z (about 1 year ago)
- Last Synced: 2024-09-18T17:15:45.730Z (about 2 months ago)
- Topics: alpine, dns-prefetch, html-minification, laravel, laravel-package, livewire, page-loading-speed, performance-optimization, user-experience
- Language: PHP
- Homepage:
- Size: 301 KB
- Stars: 6
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
## Introduction
`Laravel Tachyon` is a powerful package designed to optimize the performance of your Laravel applications by minifying HTML output on demand. With over 35% optimization, it helps improve page load speed and overall user experience.
**Laravel Tachyon** supports the following:
- **Laravel Livewire**: Laravel Tachyon seamlessly integrates with Laravel Livewire, allowing you to optimize the HTML output of your Livewire components.
- **Alpine JS**: Laravel Tachyon is compatible with Alpine JS, ensuring that the optimization process does not interfere with the functionality of your Alpine JS components.
Additionally, **Laravel Tachyon** ensures that the optimization process does not break the following HTML elements:
- `
`: The content within `` tags, which is typically used for displaying preformatted text, is preserved and not modified during the optimization process.- ``: The content within `` tags, which is used for input fields that allow multiple lines of text, is also preserved and not modified.
- ``: The content within `<script>` tags, which is used for JavaScript code, is not modified by Laravel Tachyon. This ensures that your JavaScript code remains intact and functions as expected.
## Getting Started
### Requirements
- **[PHP 8.0+](https://php.net/releases/)**
- **[Laravel 9.0+](https://github.com/laravel/laravel)**
### InstallationYou can install the package via composer:
```zsh
composer require ideal-creative-lab/laravel-tachyon
```This package supports Laravel [Package Discovery][link-package-discovery].
#### Publish configuration file
To customize the package settings, you can publish the configuration file with the following command:
```zsh
php artisan vendor:publish --provider="IdealCreativeLab\LaravelTachyon\ServiceProvider"
```### Middleware Registration
To enable the package functionality, make sure to register the provided middlewares in the kernel of your Laravel application. Here's an example of how to do it:
```php
// app/Http/Kernel.phpprotected $middleware = [
...
\IdealCreativeLab\LaravelTachyon\Middleware\InlineCss::class,
\IdealCreativeLab\LaravelTachyon\Middleware\ElideAttributes::class,
\IdealCreativeLab\LaravelTachyon\Middleware\InsertDNSPrefetch::class,
\IdealCreativeLab\LaravelTachyon\Middleware\RemoveQuotes::class,
\IdealCreativeLab\LaravelTachyon\Middleware\CollapseWhitespace::class,
\IdealCreativeLab\LaravelTachyon\Middleware\DeferJavascript::class,
]
```## Middlewares Details
- `RemoveComments::class`: Removes HTML, JS, and CSS comments from the output to reduce the transfer size of HTML files.
- `CollapseWhitespace::class`: Reduces the size of HTML files by removing unnecessary white space.
- **It automatically calls the `RemoveComments::class` middleware before executing.**
- You can **ignore** minification of some elements. Add `data-tachyon-ignore` as an element attribute to do so.
- `RemoveQuotes::class`: Removes unnecessary quotes from HTML attributes, resulting in a reduced byte count on most pages.
- `ElideAttributes::class`: Reduces the transfer size of HTML files by removing attributes from tags if their values match the default attribute values.
- `InsertDNSPrefetch::class`: Includes `<link rel="dns-prefetch" href="//www.example.com">` tags in the HTML `<head>` section to enable DNS prefetching, reducing DNS lookup time and improving page load times.
- `TrimUrls::class`: Trims URLs by making them relative to the base URL of the page. This can help reduce the size of URLs and may improve performance.
- **⚠️ Note: Use this middleware with care, as it can cause problems if the wrong base URL is used.**
- `InlineCss::class`: Transforms the inline `style` attribute of HTML tags into classes by moving the CSS into the `<head>` section, improving page rendering and reducing the number of browser requests.
- `DeferJavascript::class`: Defers the execution of JavaScript code in HTML, prioritizing the rendering of critical content before executing JavaScript.
- If you need **to cancel the defer** in some script, use `data-tachyon-no-defer` as a script attribute to cancel the defer.## Configuration
After installing the package, you may need to configure some options according to your needs.
### Disable Service
To disable the Laravel Tachyon service in your local environment and get readable output, modify the following configuration file:
```php
// config/laravel-tachyon.php//Set this field to false to disable the Laravel Tachyon service.
'enable' => env('LARAVEL_TACHYON_ENABLED', true),
```
### Skip routesYou can configure the package to skip optimization for certain routes. Use the `*` wildcard to match multiple routes. Here's an example:
```php
// config/laravel-tachyon.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
];
```Feel free to adjust the configuration options according to your specific needs.
> ***Notice:*** By default, the package automatically skips `binary` and `streamed` responses. See the [File Downloads][link-file-download] for more information.
## Testing
```zsh
$ composer test
```## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
[link-file-download]: https://laravel.com/docs/10.x/responses#file-downloads
[link-package-discovery]: https://laravel.com/docs/10.x/packages#package-discovery