Posiadaczom sklepów opartych na silniku Ubercart (moduł Drupala) na pewno znane są problemy z cache. Po włączeniu pamięci podręcznej mamy szereg problemów z koszykiem anonimowych użytkowników (np. jednemu klientowi jest pokazywany koszyk drugiego). Rozwiązaniem jest wyłączenie cache, co skutkuje znaczącym spowolnieniem witryny. Jak temu zaradzić?
Sprawę załatwia odpowiednio skonfigurowany moduł Dynamic Cache.
W jego konfiguracji wpisujemy:
if ( isset($_SESSION['uc_cart_id']) || isset($_SESSION['ucga_order_id']) || !empty($_POST) ) { $GLOBALS['conf']['cache'] = false; }
Wyłączamy w ten sposób cache dla odwiedzających, którzy mają produkty w koszyku lub wysłali dane formularza metodą POST (np. właśnie dodali produkt do koszyka).
Wszyscy pozostali (czyli ponad 90% ruchu) korzystają z pamięci podręcznej.
Zaliczają się tu również m.in. roboty Google, które biorą szybkość wczytywania jako jeden z czynników przy ustalaniu rankingu
Po ustawieniu moduły warto przetestować stronę wchodząc na /dynamic_cache_test jako anonimowy użytkownik. Powinniśmy zobaczyć wersję CACHED. Gdy dodamy coś do koszyka i wrócimy na tę stronę, napis DYNAMIC będzie oznaczał że cache zostało wyłączone – zgodnie z założeniami.
Innym rozwiązaniem jest skorzystanie z Ubercart AJAX Cart, jednak wiążą się z tym pewne problemy – osobiście wybrałem więc rozwiązanie, które wydaje mi się bardziej eleganckie.