Po prostu zaczynam rozumieć pamięć podręczną jako całość. Mam proste indexAction(), które pobiera wszystkie dane zestawów danych. Moje podejście jest:Jak podejść do buforowania w ZF2
- czek na istniejący klucz „controllername-Index-index”
- jeśli istniejący: zwraca wartość klucz
- jeśli nie istniejących, zrobić normalne działanie i dodać klucz
Wartość wewnątrz klucza powinna być ViewModel, który zostanie wygenerowany i wypełniony moimi danymi.
Oto co zrobiłem do tej pory:
<?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;
}
Części buforowania są komentarzem do celów testowych, ale w zasadzie jest to wszystko, co robię. Konfiguracja/usługa buforowania wygląda następująco:
<?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(
)
)
)
));
},
Serializacja i buforowanie działają całkiem nieźle, ale jestem zaskoczony brakującymi wynikami. Przechodząc przez to, co mówi mi ZendDevelopersToolbar, czasy BEZ buforowania sięgają od 1.8s do 2.5s. Brak części komentarza (włączone) w rzeczywistości nie poprawia w ogóle czasu ładowania mojej strony.
Moje pytanie brzmi: czy to podejście jest całkowicie błędne? Czy istnieją inne, szybsze części, które można zaoszczędzić dzięki pewnym sztuczkom konfiguracyjnym?
Uważam, że 2-sekundowy czas ładowania strony jest ZDECYDOWANIE zbyt wolny. 1s to dla mnie maksymalna ilość danych, ale z pewnością nie jest to nic więcej: S
Wszystkie pomoc/podpowiedzi/sugestie będą bardzo mile widziane. Z góry dziękuję!
Czy jesteś pewien, że ta konkretna część jest przyczyną konieczności ten problem? Moje strony ZF2 zwykle działają poniżej 100 ms, więc powinna istnieć inna przyczyna tego. Również wolałbym buforować określone wyniki zapytania, bez modeli widoku. Jeśli chcesz cache cokolwiek związanego z widokiem, cache renderowania widoku, pomiń także parsowanie plików .phtml. W przeciwnym razie buforuj wynik usługi. –
Pytanie, gdzie należy wstrzyknąć kod, aby umożliwić już buforowanie renderowania widoku? Chociaż najwyraźniej byłbym mądry sugerował by zobaczyć, co sprawia, że mój scenariusz jest tak powolny. Naprawdę nie ma włączonych wielu modułów, zfcuser, bjyauthorize, zenddeveloperstoolbar i the doktryna-stuff + mój moduł, który używa doktryny, aby uzyskać pewne elementy db: S – Sam
Odpowiedziałem na możliwą opcję pamięci podręcznej, w której twój wynik html jest buforowany. Zainstaluj Xdebug i wykonaj kilka działań profilujących, aby zobaczyć, co jest prawdziwym wąskim gardłem twojej aplikacji. –