Warum der Views-Cache in Drupal nicht immer hilfreich ist

Warum der Views-Cache in Drupal nicht immer hilfreich ist

Die Fähigkeit des Views-Moduls seine Ausgaben zu cachen ist in der Regel ausgesprochen nützlich und sorgt oft für einen Performance-Gewinn. Manchmal kann die Aktivierung des Cache jedoch kontraproduktiv sein und zu Fehlern auf der Website führen.

Einen solchen Fall hatten wir kürzlich. Auf einer Kundenwebseite gibt es eine OpenLayers-Karte mit einer Suchfunktion die mit einem View arbeitet. Diese Suchfunktion zeigt die gefundenen Standorte auf einer Karte von OpenStreetMaps an und listet sie mit zusätzlichen Informationen in einer angehängten Tabelle auf. Diese Tabelle hat die übliche Seitennavigation mit der man jeweils um 10 Einträge vor oder zurück blättern kann. Alles funktionierte einwandfrei... bis zum Einschalten des Cache für diesen View. Sobald der Cache aktiv ist, funktioniert die Seitennavigation nicht mehr. Klickt man z.B. den Link für Seite 2 an so kommt man noch auf die zweite Seite. Ein Klick auf den Link für Seite 3 ändert dagegen die Ansicht nicht, man bleibt auf Seite 2. Auch die Links für die folgenden Seiten funktionieren nicht mehr. Das gleiche gilt für die Vor- und Zurückblättern-Links. Entweder passiert gar nichts oder man kommt zurück auf Seite 1.

Die Fehlersuche gestaltete sich zunächst etwas schwierig, weil wir zunächst ein Views-Update in Verdacht hatte. Ein Vergleich des Views der Liveseite mit dem in der Entwicklungsumgebung (wo die Navigation funktionierte) brachte uns dann auf die richtige Spur. Der einzige Unterschied zwischen beiden Views war, dass bei dem einen der Cache eingeschaltet war, bei dem anderen nicht. Kaum war der Cache deaktiviert, schon funktioniert alles wieder.

Und so schaltet man den Cache für einen View ein oder aus:

  1. View zum Bearbeiten öffnen
  2. Im Master-Display auf der rechten Seite den Link neben "Cache" anklicken.
    Cache im View-Modul von Drupal ein- und ausschalten
  3. Im folgenden Dialog kann man den Cache einnschalten indem man "Zeitbasiert" wählt, bzw. ausschalten indem man "Keines" anklickt.
  4. Zum Schluss noch den View speichern und ab sofort ist für diesen View der Cache deaktiviert.