php - index - ¿Cómo comprimo HTML en laravel 5?
laravel 5.7 lang es (6)
El código completo es este (con GZip personalizado habilitado):
<?php
namespace App/Http/Middleware;
use Closure;
class OptimizeMiddleware
{
/**
* Handle an incoming request.
*
* @param /Illuminate/Http/Request $request
* @param /Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$buffer = $response->getContent();
if(strpos($buffer,''<pre>'') !== false)
{
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//r/" => '''',
"/>/n</" => ''><'',
"/>/s+/n</" => ''><'',
"/>/n/s+</" => ''><'',
);
}
else
{
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//n([/S])/" => ''$1'',
"//r/" => '''',
"//n/" => '''',
"//t/" => '''',
"/ +/" => '' '',
);
}
$buffer = preg_replace(array_keys($replace), array_values($replace), $buffer);
$response->setContent($buffer);
ini_set(''zlib.output_compression'', ''On''); // If you like to enable GZip, too!
return $response;
}
}
Consulte el inspector de red de su navegador para ver el encabezado Content-Length
antes o después de implementar este código.
disfrútala ... :).. .
En Laravel 4.0, uso el siguiente código para comprimir las salidas de respuesta HTML de laravel al navegador, sin embargo, no funciona en larara 5
App::after(function($request, $response)
{
if($response instanceof Illuminate/Http/Response)
{
$buffer = $response->getContent();
if(strpos($buffer,''<pre>'') !== false)
{
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//r/" => '''',
"/>/n</" => ''><'',
"/>/s+/n</" => ''><'',
"/>/n/s+</" => ''><'',
);
}
else
{
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//n([/S])/" => ''$1'',
"//r/" => '''',
"//n/" => '''',
"//t/" => '''',
"/ +/" => '' '',
);
}
$buffer = preg_replace(array_keys($replace), array_values($replace), $buffer);
$response->setContent($buffer);
}
});
Por favor, ¿cómo hago este trabajo en Laravel 5.
O
Por favor, proporcione una mejor manera de comprimir HTML en laravel 5 si la hay. Gracias por adelantado.
NB: No deseo usar ningún paquete de laravel para comprimir html, solo necesito un código simple que haga el trabajo sin matar el rendimiento.
Esto es casi una copia de Vahid''s respuesta de Vahid''s pero soluciona dos problemas.
1) Se comprueba si la respuesta es un BinaryFileResponse
ya que cualquier intento de modificar este tipo de respuesta generará una Excepción.
2) Se mantuvieron los caracteres de nueva línea, ya que la eliminación completa de las nuevas líneas dará lugar a un código Javascript incorrecto en las líneas con comentarios de una sola línea.
Por ejemplo, el siguiente código
var a; //This is a variable
var b; //This will be commented out
Se convertirá
var a; //This is a variable var b; //This will be commented out
Nota: en el momento de esta respuesta no pude conseguir una buena expresión regular para hacer coincidir los comentarios de una sola línea sin complicaciones o, mejor dicho, ignorar las nuevas líneas en solo líneas con un comentario de una sola línea, así que espero una mejor solución.
Aquí está la versión modificada.
<?php
namespace App/Http/Middleware;
use Closure;
class OptimizeMiddleware {
/**
* Handle an incoming request.
*
* @param /Illuminate/Http/Request $request
* @param /Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
if ($response instanceof /Symfony/Component/HttpFoundation/BinaryFileResponse) {
return $response;
} else {
$buffer = $response->getContent();
if (strpos($buffer, ''<pre>'') !== false) {
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//r/" => '''',
"/>/n</" => ''><'',
"/>/s+/n</" => ''><'',
"/>/n/s+</" => ''><'',
);
} else {
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//n([/S])/" => ''$1'',
"//r/" => '''',
"//n+/" => "/n",
"//t/" => '''',
"/ +/" => '' '',
);
}
$buffer = preg_replace(array_keys($replace), array_values($replace), $buffer);
$response->setContent($buffer);
ini_set(''zlib.output_compression'', ''On''); //enable GZip, too!
return $response;
}
}
}
La forma recomendada de hacer esto en Larvel 5 es volver a escribir su función como middleware . Como se indica en los documentos:
..this middleware realizaría su tarea después de que la solicitud maneje la solicitud:
<?php namespace App/Http/Middleware;
class AfterMiddleware implements Middleware {
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
No es una buena solución para minimizar html en middleware, ya que puede gastar mucho tiempo de CPU en él y se ejecuta en cada solicitud.
En su lugar, es mejor usar el paquete htmlmin ( https://github.com/HTMLMin/Laravel-HTMLMin ):
composer require htmlmin/htmlmin
php artisan vendor:publish
La reducción de HTML en el nivel de plantilla blade y el almacenamiento en caché en el almacenamiento debería ser mucho más eficaz.
Para facilitar la compresión, construyo mi propio módulo de laravel. Este módulo comprimirá toda la salida html final antes de enviarla al cliente (navegador).
También puede apuntar a múltiples entornos a la vez usando el archivo .env
.
Más detalles sobre cómo instalar y configurar se encontrarán aquí.
esta es la mejor manera ... no necesitamos usar paquetes de laravel. Gracias.
<?php
namespace App/Http/Middleware;
use Closure;
class OptimizeMiddleware
{
/**
* Handle an incoming request.
*
* @param /Illuminate/Http/Request $request
* @param /Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$buffer = $response->getContent();
if(strpos($buffer,''<pre>'') !== false)
{
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//r/" => '''',
"/>/n</" => ''><'',
"/>/s+/n</" => ''><'',
"/>/n/s+</" => ''><'',
);
}
else
{
$replace = array(
''/<!--[^/[](.*?)[^/]]-->/s'' => '''',
"/</?php/" => ''<?php '',
"//n([/S])/" => ''$1'',
"//r/" => '''',
"//n/" => '''',
"//t/" => '''',
"/ +/" => '' '',
);
}
$buffer = preg_replace(array_keys($replace), array_values($replace), $buffer);
$response->setContent($buffer);
ini_set(''zlib.output_compression'', ''On''); // If you like to enable GZip, too!
return $response;
}
}