2

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

你会怎么做?任何指针表示赞赏?

非常感谢!

4

1 回答 1

0

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

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

于 2012-10-16T12:14:24.730 回答