【问题标题】:Full page cache, block update全页缓存,块更新
【发布时间】:2014-05-20 22:31:55
【问题描述】:

我想实现全页缓存,但目前我有 1 个问题要处理。

我们使用基于 Zend 和 Varien 库的电子商务系统:Magento 电子商务社区版。

我能够缓存输出,唯一的问题是,如何处理以下情况:

用户访问网站,然后转到目录/产品并将一些产品添加到购物车,然后返回目录。

问题在于,当他将产品添加到购物车时,有一些特定的块可能需要更新。所以我可以禁用缓存发布请求,但是我如何更新某些特定的块或如何实现这个“占位符”,它将被更新?我想可能有一些“最佳实践”或缓存模式。

附:致 magento 人:请不要提醒我有关企业版和付费模块的信息。

【问题讨论】:

  • 正确获取整页缓存是一项复杂且大量的工作。投资现有模块 FWIW 可能会便宜得多。我建议重新考虑你的优先事项。
  • 如果我通过只缓存 cms/catalog/product 页面来实现这种缓存,只有当客户注销并且他没有进行购物车或 Whishlist 等任何操作时。

标签: php zend-framework caching magento zend-cache


【解决方案1】:

使用 Magento 社区版可以通过三种方式获得更好的性能:

1.使用清漆

Varnish (https://www.varnish-cache.org/) 称自己为“Web 应用程序加速器”,是一个透明的反向代理。如果您了解 Squid,那么您就会有一个模糊的概念 - Varnish 就像 Squid,只是更聪明、更快。 :)

使用 Varnish,您可以实现自己的完整站点缓存,根据我的经验,这甚至比 Magento 企业版的完整页面缓存快得多。

但是,Varnish 不是标准工具,因此如果您将 Magento 安装托管在一个普通的 PHP 网络空间包中,您可能无法安装/使用它。要安装和使用 Varnish,您需要(root)访问您的系统或提供者,它为您提供 Varnish 服务。那里有一些 Magento 托管服务提供商,它们提供特殊的 Magento 托管服务,包括 Varnish 等服务。

Varnish 本身缓存所有类型的静态文件和页面,例如整个产品视图页面。因此,如果您开始使用 Varnish,您需要调整您的 Magento,即创建一个特定的模块,将您的页面分为静态和动态内容。

例如:产品视图是一个页面,其中包含动态部件/块的占位符,例如购物车小部件。静态内容(页面)将由 Varnish 交付,动态内容将由客户端(浏览器)通过 AJAX 调用您的应用程序服务器(Magento)加载。

因此,您的应用程序服务器将只调用这些动态块和结帐/客户登录,您可以节省大量性能。

已经有一些用于 Varnish 的 Magento 模块,例如 http://www.magentocommerce.com/magento-connect/pagecache-powered-by-varnish.html - 只需 Google 搜索“Varnish Magento”,您就会找到足够的信息。

2。构建自己的缓存系统

您可以使用 Varnish 构建自己的、简单(且愚蠢)的缓存系统,而不是使用。没有什么比纯静态 HTML 页面更快的了。所以我能想到的最简单的缓存类型(并且我自己已经实现了)是一个愚蠢的 cronjob,它定期爬取你的商店,将产品页面存储为静态 HTML 页面。动态内容(同样是购物车小部件,...)应替换为占位符。

现在您可以将这些静态 HTML 页面交付给正在快速浏览您的商店的客户 - 因为它们是静态的。必须再次使用对系统的 AJAX 调用在客户端(浏览器)上替换动态内容。

愚蠢,但简单且工作正常 - 只要您没有数千种产品(抓取会花费太长时间)。

3。不要使用 Magento

只是个玩笑,... :) 但是,Magento 往往很慢。

对于 Magento 性能优化也非常有用:The Magento Best Practice for Performance and Scalibilty Whitepaper。即使是企业版,一些小技巧对社区版也很有用。

【讨论】:

    【解决方案2】:

    magento 的开源全页缓存

    https://github.com/ezapps/Zoom-Magento-FPC

    运行速度非常快,而且是免费的。在 magento commerce 上,您有类似的扩展程序,每个域收费 500 美元

    【讨论】:

      【解决方案3】:

      我认为您需要输入一个识别 ID,当客户将产品添加到购物车时它会发生变化

          protected function _construct()
      {
      $this->addData(array(
      'cache_lifetime' => 3600,
      'cache_tags'     => array(Mage_Catalog_Model_Product::CACHE_TAG),
      'cache_key'      => $this->getProduct()->getId(),
      ));
      }
      

      添加产品时,cache_key 的值需要更改。可以试试吗??

      【讨论】:

        【解决方案4】:

        这个问题 - magento open source full page cache - 涉及该领域的一些问题和模块。

        整页缓存出现问题的可能性很大。 magento 在将产品添加到购物车等之前会进行检查,但您向用户显示的内容可能有误,这可能包括定价和其他重要方面。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-14
          • 2012-11-05
          • 1970-01-01
          • 2012-12-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多