【问题标题】:CakePHP performance issues - cached view file sizeCakePHP 性能问题 - 缓存视图文件大小
【发布时间】:2013-06-21 11:33:12
【问题描述】:

在 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 的内容。

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

【问题讨论】:

  • 如果你想要静态 html 文件 - 为什么不写静态 html 文件 =)?您可能会发现 this repo 很方便(它已经很老了,所以需要调整代码。但概念不会改变)。
  • 附加:如果您有 1000 个页面要尝试静态缓存 - 您最好将它们作为部署过程的一部分生成(即对这些页面的请求永远不会命中) php 在已部署的站点上)。

标签: cakephp caching


【解决方案1】:

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

1 - 模型

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

2 - 控制器

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多