在Laravel4.0中,我使用下面的代码将HTML Laravel响应输出压缩到浏览器,但是它在laravel 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);
}
});请告诉我如何在拉拉维尔5号完成这一任务。
或
请提供一个更好的方法压缩HTML在拉拉5,如果有的话。提前谢谢。
注意:我不想使用任何laravel软件包来压缩html,只是需要一个简单的代码来完成工作而不影响性能。
发布于 2015-03-23 04:52:14
在Larvel 5中,推荐的方法是将您的函数重写为中间件。如文件中所述:
..this中间件将在应用程序处理请求后执行其任务:
<?php namespace App\Http\Middleware;
class AfterMiddleware implements Middleware {
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}发布于 2016-05-29 14:13:17
完整的代码如下(启用了自定义GZip ):
<?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;
}
}在实现此代码之前/之后,请检查浏览器网络检查器是否有Content-Length标头。
享受吧.)。
发布于 2017-08-17 10:45:41
在中间件中减少html不是很好的解决方案,因为您可以在它上花费大量的CPU时间,并且它可以在每个请求上运行。
相反,最好使用htmlmin包( https://github.com/HTMLMin/Laravel-HTMLMin ):
composer require htmlmin/htmlmin
php artisan vendor:publish在刀片模板级别上缩小HTML并将其缓存在存储中应该会更有效。
https://stackoverflow.com/questions/29196447
复制相似问题