2

私は現在、Magento 用の ajax プラグインを開発しており、そのパフォーマンスをどのように改善できるか疑問に思っています。例から始めましょう。ショッピングカートの商品数を外部ページに表示したい。または、フル ページ キャッシュを介してレンダリングされ、JavaScript Ajax リクエストを介してカート情報を更新する必要があるページ。

そのために、私はそれを行う2つの方法を考えています。

最小限に抑えた Magento Controller を利用する

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 の最小要件をロードする方法はありますか? レイアウトエンジンは必要ないので無効にできますか? どうすればいいですか?他にどのモジュールをオフにできますか?

オブザーバーがセッションを更新 する 2 番目の解決策は、オブザーバーがショッピング カート (checkout_cart_save_after) の変更をリッスンし、PHP セッション変数を更新することです。これは、小さなカスタム PHP スクリプトで読み取ることができます。しかし、Magento が使用するのと同じセッション メカニズムに簡単にパッチを適用する方法がわかりません。Magento セッションは他の場所で処理される可能性があるため、 $_SESSION を直接使用することはお勧めできないと思います。

あなたならどうしますか?任意のポインタをいただければ幸いです?

どうもありがとう!

4

1 に答える 1

0

リクエストをキャッシュして、カートの変更を監視するオブザーバーにデータをキャッシュすることができます。その後、ブロックまたはそこにキャッシュするものをリクエストして、出力をエコーするだけです。

何度も要求するのではなく、出力をキャッシュに事前入力することをポイントします。

于 2012-10-16T12:14:24.730 に答える