我正在为Magento开发一个ajax插件,并想知道如何提高它的性能。让我们从一个例子开始吧。我想在外部页面上显示购物车中的商品数量。或者是通过整页缓存呈现的页面,需要通过JavaScript Ajax请求更新购物车信息。
为此,我看到了两种方法。
使用Magento控制器剥离到最小
class AFCustom_CartInfo_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-Type: text/html; charset=utf-8');
$out = $this->__('My Cart');
if (Mage::helper('core')->isModuleOutputEnabled('Mage_Checkout')) {
$count = Mage::getSingleton('checkout/cart')->getSummaryQty() ? Mage::getSingleton('checkout/cart')->getSummaryQty()
: MAGE::helper('checkout/cart')->getSummaryCount();
if ($count == 1) {
$out = $this->__('My Cart (%s item)', $count);
} elseif ($count > 0) {
$out = $this->__('My Cart (%s items)', $count);
} else {
$out = $this->__('My Cart');
}
}
echo $out;
exit;
}
}
如您所见,我退出控制器中的代码而不是用户渲染布局。但是这些要求仍然需要很长时间。我假设因为它必须加载整个框架。有没有办法只加载Magento的最低要求来执行控制器?它是否能够禁用布局引擎,因为它不需要?我该怎么办?我可以关闭哪些其他模块?
观察者更新会话 第二种解决方案是让观察者监听购物车中的更改(checkout_cart_save_after)并更新PHP会话变量。哪个可以在一个小的自定义PHP脚本中读出。但是,我不确定如何轻松地修补与Magento使用的相同的会话机制?我认为直接使用$ _SESSION可能不合适,因为Magento会话可能会在其他地方处理。
你会做什么?任何指针都赞赏?非常感谢!
答案 0 :(得分:0)
您可以缓存您的请求并将数据放入观察者的缓存中,观察购物车更改,然后您只需要请求块或您在那里缓存的任何内容并回显输出。
指出您预先将输出填充到缓存而不是一遍又一遍地请求它。