私は現在、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 を直接使用することはお勧めできないと思います。
あなたならどうしますか?任意のポインタをいただければ幸いです?
どうもありがとう!