2009-12-07 58 views
24

大多数网站都希望压缩其内容以节省带宽。但是,当涉及到运行PHP的Apache服务器时,有两种方法可以实现 - with PHP或使用apache。那么你的服务器上哪一个更快或更容易?使用PHP ob_start()与Apache Deflate/Gzip压缩内容?

例如,在PHP我在页面开始运行以下功能来启用它:

/** 
* Gzip compress page output 
* Original function came from wordpress.org 
*/ 
function gzip_compression() { 

    //If no encoding was given - then it must not be able to accept gzip pages 
    if(empty($_SERVER['HTTP_ACCEPT_ENCODING'])) { return false; } 

    //If zlib is not ALREADY compressing the page - and ob_gzhandler is set 
    if ((ini_get('zlib.output_compression') == 'On' 
     OR ini_get('zlib.output_compression_level') > 0) 
     OR ini_get('output_handler') == 'ob_gzhandler') { 
     return false; 
    } 

    //Else if zlib is loaded start the compression. 
    if (extension_loaded('zlib') AND (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)) { 
     ob_start('ob_gzhandler'); 
    } 

} 

other option是使用Apache deflate or gzip(这两者都是very close)。要启用它们,你可以在你的.htaccess文件中添加这样的内容。

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php 

由于PHP是一种脚本语言(其必须由PHP加载)我假设apache的方法将是1)更稳定和2)更快。但是,假设在现实世界中没有多大用处。

毕竟,你会认为与巨大的财务支持窗口... ,我们不会去那里。

回答

14

我们正在运行...很多web服务器,处理60M/uniques /天。通常这不值得一提,但你的问题似乎是基于经验。

我们在apache上运行它。无论您选择何种方法,出现的另一端是相同的(或接近以至于无关紧要)。

我们选择阿帕奇几个原因:

  • 零维护,我们只是把它上。没有人需要维护一些案例结构
  • 性能,在我们的测试服务器中,Apache的工作效果稍好一些。
  • Apache将输出过滤器应用于一切,而不仅仅是PHP。在某些情况下有正在同一服务器上的服务的其它类型的内容,我们希望我们的压缩.css和.js文件

一个字的警告,一些浏览器或其他应用程序故意裂伤指示客户端头支持压缩。有些人这样做是为了在客户端安全性方面缓解他们的工作(像诺顿互联网安全等应用)。你可以忽略它,或者尝试添加额外的情况来重新编写请求以使其看起来正常(浏览器确实支持它,应用程序或代理只是为了让它自己的生活更容易)。或者,如果您使用flush()命令将输出先发送到浏览器,并且您正在应用压缩,则可能需要用空白填充字符串的末尾以说服服务器尽早发送数据。

+0

+1:我几乎不处理您的流量,但我更喜欢服务器处理它。有一个或两个注意事项:某些类型的声音文件不应被压缩,否则媒体播放器会窒息。这包括带有mp3文件的Windows Media Player。 – Powerlord 2009-12-07 21:35:19

+0

虽然这个问题与媒体播放器8,所以它可能已经修复了。 – Powerlord 2009-12-07 21:35:52

+0

通常我只压缩类型文本/ *的项目,然后我樱桃选择一些更多的内容类型(如应用程序/ JSON)来获取其余。 – preinheimer 2009-12-07 21:38:00