カテゴリ製品リストブロックキャッシュの改善
-
16-10-2019 - |
質問
キャッシングの問題については、カタログ製品リストブロックを書き直します。コードを確認し、膨大な製品リストカテゴリページのキャッシュとキャッシュ検証の問題を改善するためのアドバイスを提供してください。このようなキャッシュブロックの優れた構成を持っているのは誰ですか?
class Ssd_Fix_Block_Catalog_Product_List extends Mage_Catalog_Block_Product_List
{
const CACHE_TAG = 'CATEGORY_PRODUCTS';
public function getCacheKey()
{
$url = md5(Mage::app()->getRequest()->getOriginalRequest()->getRequestUri());
if (!$this->_cache_key) {
$key = "CATEGORY_PRODUCTS_" . $url;
$this->_cache_key = $key;
}
return $this->_cache_key;
}
public function getCacheTags()
{
$data = array(self::CACHE_TAG);
if ($category = Mage::registry('current_category')) {
$data[] = Mage_Catalog_Model_Category::CACHE_TAG . "_" . $category->getId();
}
if (count($products = $this->getProductList())) {
foreach ($products as $p) {
$data[] = Mage_Catalog_Model_Product::CACHE_TAG . "_" . $p->getId();
}
}
return $data;
}
public function getCacheLifetime()
{
return 60 * 60 * 24;
}
//other methods here
}
解決
オーバーライドする方が良いでしょう getCacheKeyInfo()
の代わりに getCacheKey()
.
public function getCacheKeyInfo()
{
$info = parent::getCacheKeyInfo();
// Add any additional data you want
$info[] = Mage::app()->getRequest()->getOriginalRequest()->getRequestUri();
return $info;
}
値のハッシュは自動的に処理されます。
これには、現在のストアビュー、テーマ、使用済みテンプレートなどの重要なデータが含まれます。
一般に、URIにはキャッシュの重要な目的に理想的であるとは考えられていません。これは、URIに含まれていないブロック出力に影響を与える可能性のある多くの要因があるためです。
たとえば、ブロック出力に価格が含まれている場合は、顧客グループIDを必ず含めてください(顧客にリンクしています tax_class_id
)キャッシュキー情報配列。
また、すべてが同じページを参照する要求URIのいくつかの順列がある場合があります。たとえば、トレーリング /なしで。通常、キャッシュキーアレイを手動で構築するためのより良い結果につながります。
キャッシュタグについては、表示されたすべての製品のキャッシュタグも含めてください(既に1.8/1.13で行われています)。
また、ブロックキャッシュのチューニングに加えて、フルページキャッシュを使用することもお勧めします。
他のヒント
巨大な製品リストカテゴリページ
たぶん、決定論的アルゴリズムのようなものです Monte Carlo
良い出発点です。たとえば、(10% * IsthishardTodofactor)の確率でキャッシュできます。通常のIsthishardTodofactorで製品を10回見せた後、キャッシュしようとする可能性が高くなります。テスト中に1回または2回しか表示されていない場合、キャッシュを埋める可能性が低くなります。また、TTLを少しランダムにします。まったく同時に、多くのキャッシュエントリが期限切れになることを望まないことです。