CakePHP性能问题 - 缓存视图文件大小

时间:2013-06-21 11:33:12

标签: cakephp caching

在CakePHP网站(2.3.1)上我注意到每页的缓存视图文件大小非常大(10-60MB)。

通常对于网站,我希望缓存只存储纯HTML输出,但Cake会在文件顶部添加序列化PHP。从性能角度来看,这个大文件大小是有问题的,占用了几千兆字节的空间(我们有1000页),并且不适合APC缓存(默认最大文件大小为1MB)。

这是缓存视图文件顶部的示例块:

    <!--cachetime:1363985272--><?php
    App::uses('StaticController', 'Controller');
            $request = unserialize(base64_decode('<removed>'));
            $response = new CakeResponse();
            $controller = new StaticController($request, $response);
            $controller->plugin = $this->plugin = '';
            $controller->helpers = $this->helpers = unserialize(base64_decode('<removed>'));
            $controller->layout = $this->layout = 'default';
            $controller->theme = $this->theme = '';
            $controller->viewVars = unserialize(base64_decode('<removed>'));
            Router::setRequestInfo($controller->request);
            $this->request = $request;
            $this->viewVars = $controller->viewVars;
            $this->loadHelpers();
            extract($this->viewVars, EXTR_SKIP);
    ?>

我根本不喜欢PHP,因为下面的HTML是静态生成的输出。占据所有文件大小的巨大开销。

bootstrap.php中的缓存设置:

Cache::config('default', array('engine' => 'Apc'));

目前我唯一的选择是改善视图缓存文件的文件大小。此时此服务器上无法添加类似Varnish的东西。

解决文件大小问题的任何提示都会很棒。

1 个答案:

答案 0 :(得分:0)

通过进行这两项更改,我最终能够大大减少缓存视图文件的大小。希望对遇到类似问题的人有用。

1 - 模型

模型之间存在许多关系,但我实际上只是在关系的一侧使用数据。例如,一篇文章有​​图像,但我也有一个关系,让文章属于一个图像,我从来没有。使关系“单向”即按需要减少重度查询。

2 - 控制器

在我的paginate数组中,我有'recursive'=>2,,每页导致数百个额外查询。通过将此选项更改为'recursive'=>1,我能够将重页面上的查询从900减少到20。在该模型上有大约6对多关系。这个递归级别必然会在某个阶段无意中滑入。

我仍然觉得CakePHP在缓存的视图文件中序列化PHP是很奇怪的。更优化的方法是没有任何PHP的静态HTML文件。