首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在laravel 5中压缩HTML

如何在laravel 5中压缩HTML
EN

Stack Overflow用户
提问于 2015-03-22 15:52:14
回答 10查看 28.9K关注 0票数 27

在Laravel4.0中,我使用下面的代码将HTML Laravel响应输出压缩到浏览器,但是它在laravel 5中不工作。

代码语言:javascript
复制
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,只是需要一个简单的代码来完成工作而不影响性能。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2015-03-23 04:52:14

在Larvel 5中,推荐的方法是将您的函数重写为中间件。如文件中所述:

..this中间件将在应用程序处理请求后执行其任务

代码语言:javascript
复制
<?php namespace App\Http\Middleware;

class AfterMiddleware implements Middleware {

    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}
票数 7
EN

Stack Overflow用户

发布于 2016-05-29 14:13:17

完整的代码如下(启用了自定义GZip ):

代码语言:javascript
复制
<?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标头。

享受吧.)。

票数 25
EN

Stack Overflow用户

发布于 2017-08-17 10:45:41

在中间件中减少html不是很好的解决方案,因为您可以在它上花费大量的CPU时间,并且它可以在每个请求上运行。

相反,最好使用htmlmin包( https://github.com/HTMLMin/Laravel-HTMLMin ):

代码语言:javascript
复制
composer require htmlmin/htmlmin
php artisan vendor:publish

在刀片模板级别上缩小HTML并将其缓存在存储中应该会更有效。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29196447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档