【问题标题】:PHP performance: gzcompress() vs ob_start('ob_gzhandler')PHP 性能:gzcompress() 与 ob_start('ob_gzhandler')
【发布时间】:2013-10-27 21:51:42
【问题描述】:

我想知道如何最好地压缩我的输出。

通常我只是在index.php 的顶部添加ob_start('ob_gzhandler'),以压缩整个输出。

我正在使用一个简单的缓存类将生成的 HTML 存储在一个文件 (index.cache.htm) 中,而不是在每次刷新时重新构建它。由于性能更好,index.cache.htm 的内容被缩小了。

我不能压缩缓存的内容而不是使用ob_start('ob_gzhandler')吗?

示例 1(缓存缓冲输出):

ob_start();                               // start buffer
$b = ob_get_contents();                   // get buffer
ob_end_clean();                           // free buffer

$b = CustomHTMLMinifyFunction($b);        // minify the HTML
$b = gzcompress($b);                      // compress the HTML
file_put_contents('index.cache.htm', $b); // save file

示例 2(缓存显式数据):

$d = 'Some data, e.g. JSON';              // some data
$d = gzcompress($d);                      // compress data
file_put_contents('data.cache.txt', $d);  // save file

有什么区别或最佳做法?提前致谢!

编辑:将压缩数据存储在文件中是否有意义?还是仅在输出数据时有用?

【问题讨论】:

    标签: php performance caching gzip


    【解决方案1】:

    ob_start:

    [callback] 函数将在输出缓冲区被刷新(发送)或清理(使用ob_flush()ob_clean() 或类似函数)或输出缓冲区被刷新到请求结束时的浏览器。

    换句话说,ob_get_contents() 将返回输出缓冲区未压缩的内容:

    $log = 0;
    
    function callback($input){
        global $log;
        $log += 1;
        return ob_gzhandler($input);
    }
    
    ob_start('callback');
    $ob = ob_get_contents();
    
    echo $log; // echoes 0, callback function was not called
    

    如果要缓存输出数据的压缩版本,则必须压缩 ob_get_contents() 的输出。

    但是您必须配置您的网络服务器,以便它知道文件是预压缩的 (instructions for Apache)。没有setting proper headers,您不能只将压缩文件发送给您的客户。

    要回答您的编辑,预压缩缓存是有意义的,否则内容会被即时压缩。另请记住,某些客户端不支持压缩:如果您希望能够提供文件,则应保留文件的未压缩版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多