【问题标题】:Magento - caching calls to MageMagento - 缓存对 Mage 的调用
【发布时间】:2011-03-04 17:04:21
【问题描述】:

我的标题中有几个调用 Mage 以获取目录类别模型并获取项目集合。

我的问题是,这似乎使我的页面慢了一倍,即使在管理员中打开了 HTML 块缓存。

我认为我可以使用:

$cache = Mage::getSingleton('core/cache');

因此可以缓存对 Mage 的调用,例如:

      $newCarCollection = Mage::getModel('catalog/category')->load(11)->getProductCollection()->setPageSize(6); 
      $newCarCollection = $newCarCollection->getItems(); 
      $cache = Mage::getSingleton('core/cache'); 
      $cache->save($newCarCollection, "car_collection", array("car_cache"), 140);
      $cache->load("car_collection");

这根本行不通。

这甚至可以做到吗,还是我只是编造的?

谢谢

更新:

function __construct()
{
    $this->addData(array(
        'cache_lifetime'    => 3600,
        'cache_tags'        => array(Mage_Catalog_Model_Category::CACHE_TAG, Mage_Core_Model_Store_Group::CACHE_TAG),
    ));
}

【问题讨论】:

    标签: magento magento-1.4


    【解决方案1】:

    需要为每种块类型启用块缓存,以及管理员中的选项。
    http://www.magentocommerce.com/wiki/development/block_cache_and_html_ouput

    如果可行,它会比缓存产品对象更有效。

    【讨论】:

    • @clockworkgeek 但是,我的 header.phtml 文件中有这些调用。在这种情况下我将如何缓存它们?取消注释调用,大约有 3 次对 Mage::getModel 的调用,然后在每个调用上都有一个 foreach 循环来获取类别中的产品
    • @terrid25 - 您可以制作包含在标题块中的自己的块。标头通常不能被缓存,因为它的内容会发生变化,例如购物车和登录/注销链接。当标题的其余部分没有时,您的块的输出可能会被缓存。
    • 我该怎么做呢?我在 page.xml 中看到了标头块 我需要创建一个新块,即 nav.phtml,然后将其添加到 page.xml 文件中吗?
    • 好的,所以我在 app/code/local/Mage/Page/Block 中创建了一个名为 Nav.php 的新块,并在 app/design/frontend/../ 中创建了 nav.phtml templates/page/html 我已将该块添加到我的 2columns.phtml 模板中,并且一切似乎都有效。我现在可以使用 getChildHtml('nav') 吗?> 现在可以将缓存放入我的 Nav.php 块吗?
    • 是的。如果您现在为新的导航块指定缓存标签和键,它应该可以工作。您可以通过在“nav.phtml”文件中的某处放置Mage::log(__FILE__) 并查看“var/log/system.log”文件来进行检查。它应该在第一次访问时显示条目,但不会在任何后续访问时显示。 (手指交叉!)
    猜你喜欢
    • 2014-02-04
    • 2014-09-27
    • 2012-12-26
    • 1970-01-01
    • 2023-03-22
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多