如何改进Magento Ajax性能?

时间:2012-10-16 11:51:18

标签: ajax performance magento

我正在为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会话可能会在其他地方处理。

你会做什么?任何指针都赞赏?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以缓存您的请求并将数据放入观察者的缓存中,观察购物车更改,然后您只需要请求块或您在那里缓存的任何内容并回显输出。

指出您预先将输出填充到缓存而不是一遍又一遍地请求它。