Eme*_*bah 22 php html-compression laravel blade laravel-5
在Laravel 4.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);
}
});
Run Code Online (Sandbox Code Playgroud)
请问我如何在Laravel 5中完成这项工作.
要么
如果有的话,请提供更好的方法来压缩laravel 5中的HTML.提前致谢.
注意:我不希望使用任何laravel包压缩html,只需要一个简单的代码来完成工作而不会破坏性能.
iva*_*zer 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;
}
}
Run Code Online (Sandbox Code Playgroud)
Content-Length在实施此代码之前/之后,请检查浏览器网络检查员是否有标题.
好好享受 ... :).. .
Jok*_*ius 14
在中间件中缩小html并不是一个很好的解决方案,因为你可以在它上面花费大量的CPU时间,它可以在每个请求上运行.
相反,最好使用htmlmin包(https://github.com/HTMLMin/Laravel-HTMLMin):
composer require htmlmin/htmlmin
php artisan vendor:publish
Run Code Online (Sandbox Code Playgroud)
在刀片模板级别上缩小HTML并将其缓存在存储中应该更加有效.
在Larvel 5中执行此操作的推荐方法是将您的函数重写为中间件.如文档中所述:
.. 在应用程序处理请求后,此中间件将执行其任务:
<?php namespace App\Http\Middleware;
class AfterMiddleware implements Middleware {
public function handle($request, Closure $next)
{
$response = $next($request);
// Perform action
return $response;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16693 次 |
| 最近记录: |