Jar*_*aro 14 performance magento
我正在寻找magento网站的性能(服务器加载时间),我正在尝试调整搜索结果页面.我意识到,当我禁用顶级导航,lev分层导航和产品列表等所有重要的东西时,我清除了所有缓存,然后在此magento核心之后再次像60个SQL查询一样重新建立数据库.有没有人有任何程序如何摆脱它们或如何将它们减少到可接受的数量?
我还能以某种方式减少创建块时花费的时间吗?
非常感谢,Jaro.
Vin*_*nai 28
Magento是一个非常灵活的电子商务框架,但这种灵活性需要付出代价:性能.这个答案是一系列指针和一些关于缓存的细节(特别是对于块).
需要考虑的一件事是Magento环境,例如调整php,Web服务器(支持Apache上的nginx)和MySQL.另外,为Magento建立一个良好的缓存后端.所有这些都包含在例如Magento Performance白皮书中,该白皮书也适用于CE.
在设置环境之后,事物的另一面就是代码.
通过启用平面表目录(系统>配置>目录>前端),可以减少某些页面的查询数量,但始终会有大量查询.
除了调整环境(APC,内存,CPU)之外,您也无法真正减少创建块所花费的时间.正如其他评论者所说,您最好的选择是利用Magento内置的缓存功能.
因为您在问题中特别提到了块,所以我将详细介绍块缓存.块缓存由三个属性控制:
所有这些特性可在设置_construct()使用使用setData()或魔术设置器,一个块的方法或通过实施所述相关联getter方法(getCacheLifetime(),getCacheKey(),getCacheTags()).
该cache_lifetime在(整数)秒为单位指定.如果设置为false(boolean),则块将被缓存(无到期).如果设置为null块将不会被缓存(这是默认值Mage_Core_Block_Abstract).
该cache_key是唯一的字符串,用于标识在缓存池中的缓存记录.默认情况下,它是由方法返回的数组构造的getCacheKeyInfo().
// Mage_Core_Block_Abstract
public function getCacheKeyInfo()
{
return array(
$this->getNameInLayout()
);
}
public function getCacheKey()
{
if ($this->hasData('cache_key')) {
return $this->getData('cache_key');
}
/**
* don't prevent recalculation by saving generated cache key
* because of ability to render single block instance with different data
*/
$key = $this->getCacheKeyInfo();
//ksort($key); // ignore order
$key = array_values($key); // ignore array keys
$key = implode('|', $key);
$key = sha1($key);
return $key;
}
Run Code Online (Sandbox Code Playgroud)
在自定义块中自定义缓存键的最佳方法是覆盖该getCacheKeyInfo()方法,并根据需要添加唯一标识缓存块所需的数据.
例如,为了根据客户群缓存不同版本的块,您可以执行以下操作:
public function getCacheKeyInfo()
{
$info = parent::getCacheKeyInfo();
$info[] = Mage::getSingleton('customer/session')->getCustomerGroupId()
return $info;
}
Run Code Online (Sandbox Code Playgroud)
所述cache_tags是一个阵列,使高速缓冲存储器分割.您可以删除仅匹配一个或多个标记的缓存部分.
在系统>缓存管理下的管理界面中,您可以看到几个可用的默认缓存标记(例如BLOCK_HTML,CONFIG,...).您也可以使用自定义缓存标记,只需指定它们即可.
这是部分Zend_Cache实现,并且需要比远不如经常定制cache_lifetime和cache_key.
除了块,Magento还会缓存许多其他东西(集合数据,配置......).
您可以使用缓存你自己的数据Mage::app()->saveCache(),Mage::app()->loadCache(),Mage::app()->cleanCache()和Mage::app()->removeCache().请仔细查看Mage_Core_Model_App这些方法的详细信息,它们非常简单.
您还需要使用整页缓存模块.如果您使用的是Magento EE,那么您已经拥有了它.否则搜索Magento Connect - 有很多选项(商业).
其中一些模块还可以在整页缓存方面为您调整Magento的各个部分,例如Nitrogento(商业).
使用像Varnish这样的反向代理也非常有用.
关于这个主题有很多博客文章.以下是Nitrogento扩展的出版商的一篇文章.
如果您在更低规模的环境中运行Magento,请查看我在magebase.com 上优化文件缓存后端的帖子.
Osc*_*als 11
这个线程很旧但非常有用.我正在为速度添加其他评论: