html压缩问题

时间:2011-05-07 19:04:31

标签: php

我正面临服务器负载问题。我检查了所有的查询和其他东西,但他们是最终我发现它来自这个功能的问题

  function compress($buffer) {
    $buffer = str_replace("\t", '', $buffer);
    return $buffer;
  }

ob_start("ob_gzhandler");
ob_start("compress"); 

当我删除该功能时,负载正常。

关于这个问题的任何想法。

此致

1 个答案:

答案 0 :(得分:0)

ob_start("ob_gzhandler");

此方法依赖于Apache服务器,此外,还必须安装和加载mod_gzip模块。在使用压缩时,记住,只有当浏览器不能理解压缩内容或者没有请求压缩内容时,服务器上的压缩才会激活,服务器只是服务于简单的未压缩内容!

上面提到的方法既快速又简单,但是它的缺点是它只适用于带有mod_gzip的Apache。不仅如此,但根据Php手册,这不是gzipping的首选方法。

默认情况下,压缩级别设置为6。压缩级别越高意味着服务器CPU的负载越大。您可能希望尝试使用这些级别来查找一个值,该值可以为服务器上可接受的负载量提供良好的压缩。

要更改压缩级别,只需在ob_start(“ob_gzhandler”)之前插入以下行:

ini_set('zlib.output_compression_level', 4);
ob_start("ob_gzhandler"):

另一件事,如果你使用PHP gzipping然后记得关闭压缩,如果gzipping没有关闭,那么它有时会导致服务器加载。使用ob_end_flush

将输出刷新到浏览器
ob_end_flush();

推荐使用GZip连接:

方法1:

如果你在所有页面上进行压缩,那么我建议使用.htaccess方法,因为它实现起来非常简单,通过.htaccess文件,你可以进一步配置服务器配置。现在要启用gzip压缩,请将以下行添加到.htaccess文件中。

php_value output_handler ob_gzhandler

方法2:

通过PHP优化方式使用Gzipping的正确方法是:

// Include this function on your pages
function print_gzipped_page() {

    global $HTTP_ACCEPT_ENCODING;
    if( headers_sent() ){
        $encoding = false;
    }elseif( strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false ){
        $encoding = 'x-gzip';
    }elseif( strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false ){
        $encoding = 'gzip';
    }else{
        $encoding = false;
    }

    if( $encoding ){
        $contents = ob_get_contents();
        ob_end_clean();
        header('Content-Encoding: '.$encoding);
        print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
        $size = strlen($contents);
        $contents = gzcompress($contents, 9);
        $contents = substr($contents, 0, $size);
        print($contents);
        exit();
    }else{
        ob_end_flush();
        exit();
    }
}

// At the beginning of each page call these two functions
ob_start();
ob_implicit_flush(0);

// Then do everything you want to do on the page
echo 'Hello World';

// Call this function to output everything as gzipped content.
print_gzipped_page();

希望这可以解决您的服务器加载问题。