1

CakePHP サイト (2.3.1) で、キャッシュされたビュー ファイルのサイズがページごとに非常に大きい (10-60MB) ことに気付きました。

通常、サイトでは、キャッシングが純粋な HTML 出力を保存することを期待しますが、Cake はシリアル化された PHP をファイルの先頭に追加しています。パフォーマンスの観点からすると、この大きなファイル サイズは問題があり、ギガバイトのスペースを使い果たし (数千ページあります)、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);
    ?>

以下の HTML は静的に生成された出力であるため、PHP がまったく含まれていないことをお勧めします。すべてのファイル サイズを占める膨大なオーバーヘッド。

bootstrap.php のキャッシュ設定:

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

現在、私の唯一のオプションは、ビュー キャッシュ ファイルのファイル サイズを改善することです。現時点では、このサーバーでは Varnish のようなものを追加することはできません。

ファイルサイズの問題を解決するためのヒントは素晴らしいでしょう.

4

1 に答える 1

1

これら 2 つの変更を行うことで、キャッシュされたビュー ファイルのサイズを最終的に大幅に削減することができました。同様の問題に遭遇した人に役立つことを願っています。

1 - モデル

モデル間には多くの関係がありましたが、実際には関係の一方のデータのみを使用していました。たとえば、記事には画像が含まれていましたが、画像に属する記事を取得する関係もありましたが、これは行ったことはありません。リレーションを「一方向」にします。つまり、必要に応じて重いクエリを減らします。

2 - コントローラー

私の paginate 配列では、ページ'recursive'=>2,ごとに何百もの余分なクエリが発生していました。このオプションを'recursive'=>1. 問題のモデルには約 6 個の多対多の関係がありました。この再帰レベルは、ある段階で不注意にすり抜けたに違いありません。

CakePHP がキャッシュされたビュー ファイルで PHP をシリアライズするのは、今でも奇妙に感じます。より最適なアプローチは、PHP を使用しない静的 HTML ファイルです。

于 2013-07-03T12:11:13.017 に答える