我目前正在为 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 会话可能会在其他地方处理。
你会怎么做?任何指针表示赞赏?
非常感谢!