我想实现全页缓存,但目前我有1个问题要处理。
我们与电子商务系统合作,该系统基于Zend和Varien图书馆:Magento电子商务社区版。
我能够缓存输出,唯一的问题是,如何处理以下情况:
用户访问网站,然后转到目录/产品并将一些产品添加到购物车,然后返回目录。
问题在于,当他将产品添加到购物车时,有一些特定的块,可能需要更新。所以我可以禁用缓存发布请求,但我如何更新某个特定的块或如何实现这个“占位符”,这将被更新?我想可能会有一些“最佳实践”或模式用于缓存。
P.S。对于magento人:请不要提醒我有关企业版和付费模块的信息。
答案 0 :(得分:4)
使用Magento Community Edition有三种方法可以获得更好的性能:
<强> 1。使用清漆
Varnish(https://www.varnish-cache.org/)称自己为“Web应用程序加速器”,是一个透明的反向代理。如果你了解Squid,那么你就会有一个模糊的想法 - Varnish就像Squid,只是更聪明,更快。 :)
使用Varnish,您可以实现自己的完整站点缓存,根据我的经验,它可以比Magento企业版的整页缓存快得多。
但是,Varnish不是标准工具,因此如果您只在普通的PHP网站空间包中托管Magento安装,则可能无法安装/使用它。要安装和使用Varnish,您需要(root)访问您的系统或提供商,它为您提供Varnish即服务。有一些Magento托管服务提供商,提供特殊的Magento托管服务,包括Varnish等服务。
Varnish本身缓存所有类型的静态文件和页面,例如整个产品查看页面。因此,如果您开始使用Varnish,您需要调整您的Magento,即创建一个特定的模块,将您的页面分成静态和动态内容。
例如:产品视图是一个页面,其中包含动态部件/块的占位符,例如购物车小部件。静态内容(页面)将由Varnish提供,动态内容将由客户端(浏览器)加载,向您的应用程序服务器(Magento)执行AJAX调用。
因此,您的应用程序服务器只会调用这些动态块和结帐/客户登录,您可以节省大量的性能。
已经有一些Magento模块用于Varnish,例如http://www.magentocommerce.com/magento-connect/pagecache-powered-by-varnish.html - 只是谷歌用于“Varnish Magento”,你会找到足够的信息。
<强> 2。建立自己的缓存系统
使用Varnish可以构建自己的简单(和愚蠢)缓存系统。纯静态HTML页面没有什么比这更快。所以我能想到的最简单的缓存(并且已经自己实现)是一个愚蠢的cronjob,它会定期抓取你的商店,将产品页面存储为静态HTML页面。动态内容(再次购物车小部件,......)应替换为占位符。
现在,您可以将这些静态HTML页面提供给客户,这些客户正在非常快速地浏览您的商店 - 因为它们是静态的。必须再次使用对系统的AJAX调用在客户端(浏览器)上替换动态内容。
愚蠢但简单且工作正常 - 只要您没有数千种产品(爬行需要太长时间)。
第3。不要使用Magento
只是一个玩笑,...... :)但是,Magento往往很慢。
对Magento性能优化也非常有用:The Magento Best Practice for Performance and Scalibilty Whitepaper。即使是企业版,一些提示对于Commiunity Edition也非常有用。
答案 1 :(得分:2)
magento的开源全页缓存
https://github.com/ezapps/Zoom-Magento-FPC
工作速度非常快,而且是免费的。在magento商业中,您有类似的扩展,每个域收费500美元
答案 2 :(得分:0)
我认为您需要添加一个身份识别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的值。你能试试吗?
答案 3 :(得分:0)
这个问题 - magento open source full page cache - 处理这方面的一些问题和模块。
整页缓存出现问题的范围很大。 magento在将产品添加到购物车等之前进行检查,但是您向用户显示的内容可能是错误的,这可能包括定价和其他重要区域。