全体としてキャッシングに頭を悩ませ始めたところです。指定されたすべてのデータセットを取得する単純な indexAction() があります。私のアプローチは次のとおりです。
- 既存のキー 'controllername-index-index' を確認します
- 存在する場合: キーの値を返します
- 存在しない場合は、通常のアクションを実行してキーを追加します
キー内の値は、生成されてデータが入力される ViewModel である必要があります。
これが私がこれまでに行ったことです:
<?php
public function indexAction()
{
$sl = $this->getServiceLocator();
// $cache = $sl->get('cache');
// $key = 'kennzahlen-index-index';
//
// if ($cache->hasItem($key)) {
// return $cache->getItem($key);
// }
$viewModel = new ViewModel();
$viewModel->setTemplate('kennzahlen/index/index');
$entityService = $sl->get('kennzahlen_referenzwert_service');
$viewModel->setVariable('entities', $entityService->findAll());
// $cache->setItem($key, $viewModel);
return $viewModel;
}
キャッシング部分はテストのためにコメントアウトされていますが、基本的にはこれだけです。キャッシュ構成/サービスは次のようになります。
<?php
'cache' => function () {
return \Zend\Cache\StorageFactory::factory(array(
'adapter' => array(
'name' => 'filesystem',
'options' => array(
'cache_dir' => __DIR__ . '/../../data/cache',
'ttl' => 100
),
),
'plugins' => array(
array(
'name' => 'serializer',
'options' => array(
)
)
)
));
},
シリアル化とキャッシュは非常にうまく機能しますが、結果が得られないことに驚いています。ZendDevelopersToolbar が教えてくれることによると、キャッシュなしの時間は 1.8 秒から 2.5 秒の範囲です。キャッシュ部分のコメントを解除 (有効) しても、ページの読み込み時間はまったく改善されません。
だから私の質問は: このアプローチは完全に間違っていますか? 巧妙な構成のトリックで保存できる、別のより高速な部分はありますか?
ページの 2 秒の読み込み時間は明らかに遅すぎると感じています。私にとって 1 は、膨大な量のデータを考えると最大値ですが、それ以上のものではないことは確かです :S
すべてのヘルプ/ヒント/提案は大歓迎です。前もって感謝します!