Authcache-module (Drupal)

Uit De Vliegende Brigade
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

Ik heb regelmatig het probleem dat Drupal 6-Ubercart sites nogal traag zijn vanwege de overhead vanwege dynamisch genereren van catalogus-pagina's. In juni 2013 heb ik de Authcache-module gebruikt voor http://www.carbonbrushes-online.com/.

Bins & cache-handlers

Drupal werkt met verschillende soorten bins of opslag voor verschillende soorten caches: Page-, block-, menu-caches. Misschien zijn er nog meer. Standaard gebruikt Drupal database-tabellen als bin. Dat zijn de tabellen waarvan de naam begint met cache.

Authcache houdt zich bezig met de page-cache. Standaard wordt daar een database-tabel voor gebruikt, tenzij je zo slim bent om de raad van authcache op te volgen om een cache handler te gebruiken, want database-tabellen zijn niet het meest effectief voor dit doel.

Voor Drupal 7 is Memcache API de aangewezen cache-handler. Voor Drupal 6 schijnt Cache Router ook een goede kandidaat te zijn, naast Memcache API[1].

Probleem met geleegde caches

Authcache werkt super maarrrr heeft een probleem: De cache wordt om de haverklap geleegd, onder andere bij de volgende gebeurtenissen, en dit beperkt het nut van de module nogal:

  • Aanmaak van een nieuwe node
  • Bewerken van een node
  • Cron.

Cache invalidation (Dit is achtergrondinformatie)

Het mechanisme om caches te legen, heet cache invalidation. Drupal doet dat zo snel een node wordt toegevoegd of wordt bijgewerkt, wanneer cron wordt aangeroepen, etc. Dat gaat mbv. de functie cache_clear_all:

function cache_clear_all($cid = NULL, $bin = NULL, $wildcard = FALSE) {
  if (!isset($cid) && !isset($bin)) {
    // Clear the block cache first, so stale data will
    // not end up in the page cache.
    if (module_exists('block')) {
      cache_clear_all(NULL, 'cache_block');
    }
    cache_clear_all(NULL, 'cache_page');
    return;
  }
  return _cache_get_object($bin)->clear($cid, $wildcard);
}

Cron-frequentie beperken

  • De beste oplossing die ik tot op heden ken: Cron instellen op eens per week (dat is de maximale periode) en verder niets doen. Op de meeste webwinkels worden nodes maar zelfde aangemaakt of gewijzigd
  • Cruciaal dat ongecashte pagina's wel geladen kunnen worden zonder time-out. En dat is soms niet best lastig.

De oplossing is waarschijnlijk het crawlen van de site. Zie betreffende hoofdstuk.

Boost Crawler

De maker van Authcache legt hier uit dat het lastig is om een site bij te werken, en tegelijkertijd gedeeltes van een site gecached te houden. En hier legt hij uit dat de Boost-module met de boost_crawler_run()-functie de site herbouwt mbv. een crawler. Er wordt dus bezoek gesimuleerd.

Casus: Keep it simple - Okt. 2015

Om het zo simpel mogelijk te houden:

  • Niet apart een bin of caching-systeem gebruiken, maar gewoon via de database, ook al zou dat suboptimaal zijn. Modules Cacherouter en/of Memcache API zijn dus niet nodig
  • Ik weet niet meer of de PHP Memcache-module dan nog nodig is, maar die was al geïnstalleerd, en dat was een fluitje van een cent.

Acties

  • drush en -y authcache
  • Voeg de volgende regel toe aan settings.php: $conf['cache_inc'] = './sites/all/modules/authcache/authcache.inc';
  • Ga naar Site configuration > Performance > Authcache. Zie de afbeelding bij dit hoofdstuk voor de configuratie. Tabblad Pache Caching Settings had ik niet nodig
  • In eerste instantie geen crawler gebruiken. Over een weekje of zo evalueren of dat alsnog nodig is.

Debug mode

In het begin vond ik het handig om debug mode aan te hebben, om te zien of 't echt werkt. Dan verschijnt er een labeltje linksboven in het scherm.

Klanten zien elkaars mandje?

In het verleden hadden we een storing waarbij klanten elkaars mandje voorgeschoteld kregen. Alsof er iets mis gaat met state. Ik had het gevoel dat dat samenhing met caching-experimenten. Daarom wellicht handig om caching uit te zetten vanaf het moment dat mensen in de kassarij aansluiten. En dat is standaard al het geval.

boost_crawler

Ik heb er naar gekeken, maar ik vind het voor nu te veel werk. Bij de volgende release Varnish gebruiken.

Uitgeklapt debug-venster. Oei: Een verbetering van maar liefst 537.000%. Ben ik effe blij dat ik geen additionele bins heb geïnstalleerd: Dat zou wel heel snel zijn geworden!
De beste configuratie als je de module voor het eerst gaat gebruiken
Tweede Authcache-configuratiepagina: De cart-pagina's worden standaard niet gecached. Goed!

Casus: Halte es einfach (okt. 2015)

Kunstje van hiervoor toepassen op kohlebuersten-werkzeuge.de

Zie ook

Bronnen