【发布时间】: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 在已部署的站点上)。