Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP性能:gzcompress()与ob#u start(';ob#gzhandler';)_Php_Performance_Caching_Gzip - Fatal编程技术网

PHP性能:gzcompress()与ob#u start(';ob#gzhandler';)

PHP性能:gzcompress()与ob#u start(';ob#gzhandler';),php,performance,caching,gzip,Php,Performance,Caching,Gzip,我想知道,如何最好地压缩我的输出 通常我只是在index.php的顶部添加ob\u start('ob\u gzhandler'),以压缩整个输出 我使用一个简单的缓存类将生成的HTML存储在一个文件(index.cache.htm)中,而不是在每次刷新时重建它。由于性能更好,index.cache.htm的内容已缩小 我不能压缩缓存的内容而不是使用ob\u start('ob\u gzhandler') 示例1(缓存缓冲输出): 示例2(缓存显式数据): 什么是区别或最佳实践?提前谢谢 编辑:

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

通常我只是在
index.php
的顶部添加
ob\u start('ob\u gzhandler')
,以压缩整个输出

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

我不能压缩缓存的内容而不是使用
ob\u start('ob\u gzhandler')

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

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

什么是区别或最佳实践?提前谢谢

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

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

换句话说,
ob\u get\u 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\u get\u contents()
的输出

但您必须配置web服务器,以便它知道文件已预压缩()。你不能只发送压缩文件到你的客户没有

要回答您的编辑,有必要对缓存进行预压缩,否则会动态压缩内容。还请记住,有些客户端不支持压缩:如果您希望能够为文件提供服务,则应保留文件的未压缩版本

$d = 'Some data, e.g. JSON';              // some data
$d = gzcompress($d);                      // compress data
file_put_contents('data.cache.txt', $d);  // save file
$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