YII使用gzip压缩您的应用程序输出

时间:2012-06-11 07:20:09

标签: yii yii-components yii-events

以下代码的好处是两个事件。

它实际上在做什么?

require_once($yii);
$app = Yii::createWebApplication($config);
Yii::app()->onBeginRequest = function($event)
{
  return ob_start("ob_gzhandler");
};

Yii::app()->onEndRequest = function($event)
{

return ob_end_flush();
};

$app->run();

请在我的应用程序中解释此代码的功能。它做什么?它怎么能帮助我?

3 个答案:

答案 0 :(得分:4)

上面的代码缓冲内容并根据浏览器对其进行gzip,而不是直接发送。

Yii::app()->onBeginRequest = function($event)
{
return ob_start("ob_gzhandler");
};

以上意味着当请求开始时,它将缓冲内容,并且使用回调将内容设置为gzip,deflate或none,具体取决于浏览器。

Yii::app()->onEndRequest = function($event)
{
return ob_end_flush();
};

上面的代码只是意味着在请求结束时,它将输出缓冲区内容。

答案 1 :(得分:2)

它缓冲内容,在发送浏览器之前,询问浏览器是否可以接受压缩内容。如果可以,它将在提供之前压缩HTML。否则,它会解压缩。

压缩内容减少了浏览器需要下载的HTML大小,从而提高了性能。用户将看到多少性能增益取决于HTML的大小 - 较大的页面将看到更多的好处,而小的页面实际上可能需要更长的时间来呈现,因为浏览器必须首先解压缩内容。使用Firebug或Chrome开发者工具栏来查看它是否值得。

另外,检查服务器端的影响。同样,增加服务器负载的缺点可能超过增加的客户端页面呈现速度。因此,它适用于大量缓存。

这通常是您在优化网站时所做的事情,寻求性能提升。

答案 2 :(得分:1)

如果你想直接添加gzhanlder到主配置文件你可以在main.php中设置以下行

'onBeginRequest'=>create_function('$event', 'return ob_start("ob_gzhandler");'),
'onEndRequest'=>create_function('$event', 'return ob_end_flush();'),

这两行添加GzipHandler