我想知道如何最好地压缩我的输出。
通常,我只是ob_start('ob_gzhandler')
在的顶部添加index.php
,以压缩整个输出。
我使用一个简单的缓存类将生成的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
有什么区别或最佳实践?提前致谢!
编辑:将压缩数据存储在文件中是否有意义?还是仅在输出数据时有用?
的[回调]当输出缓冲器被刷新(发送)或清洁(与功能将被调用
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()
如果要缓存输出数据的压缩版本,则必须压缩输出。
但是您必须配置Web服务器,以便它知道文件已预压缩(有关Apache的说明)。您不能不设置适当的头文件就将压缩文件发送到客户端。
为了回答您的编辑,预压缩缓存是有意义的,否则内容将被即时压缩。还请记住,某些客户端不支持压缩:如果希望能够提供文件,则应保留文件的未压缩版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句