Imaginons que j'ai un code comme ça ...Mise en cache page par parties; comment passer des variables calculées dans des parties mises en cache dans des parties jamais mises en cache?
if (!$data = $cache->load("part1_cache_id")) {
$item_id = $model->getItemId();
ob_start();
echo 'Here is the cached item id: '.$item_id;
$data = ob_get_contents();
ob_end_clean();
$cache->save($data, "part1_cache_id");
}
echo $data;
echo never_cache_function($item_id);
if (!$data_2 = $cache->load("part2_cache_id")) {
ob_start();
echo 'Here is the another cached part of the page...';
$data_2 = ob_get_contents();
ob_end_clean();
$cache->save("part2_cache_id");
}
echo $data_2;
Pour autant que vous pouvez voir que je besoin de passer la variable $ item_id en never_cache_function, mais si une partie de poing est mise en mémoire cache (part1_cache_id), alors je n'ai pas façon d'obtenir la valeur $ item_id. Je vois la seule solution - sérialiser toutes les données de la première partie (y compris la valeur $ item_id); cache puis chaîne sérialisés et désérialisable chaque fois le script exécuté ...
Quelque chose comme ça ...
if (!$data = $cache->load("part1_cache_id")) {
$item_id = $model->getItemId();
$data['item_id'] = $item_id;
ob_start();
echo 'Here is the cached item id: '.$item_id;
$data['html'] = ob_get_contents();
ob_end_clean();
$cache->save(serialize($data), "part1_cache_id");
}
$data = unserialize($data);
echo $data['html']
echo never_cache_function($data['item_id']);
Y at-il d'autres moyens pour faire ce truc? Je suis à la recherche de la solution la plus performante.
Merci
MIS À JOUR Et une autre question est - comment mettre en œuvre cette mise en cache dans le contrôleur sans séparer la page en deux modèles? C'est possible? PS: S'il vous plaît, ne suggère pas Smarty, je suis vraiment intéressé par l'implémentation de la mise en cache personnalisée.
Merci pour votre commentaire. Pour autant que je comprenne, c'est semblable à dit par moi. La seule différence est que les routines serialize et unserialize sont incluses dans la mise en cache frontend. – Kirzilla