protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
funktioniert nicht. Warum? Wie deaktiviere ich den Cache für Block?
Antworten:
Blöcke können als nicht zwischenspeicherbar festgelegt werden, indem das
cacheable
Attributfalse
in Layout-XML-Dateien festgelegt wird. Beispielsweise<block class="Block\Class" name="blockname" cacheable="false" />
Seiten, die solche Blöcke enthalten, werden nicht zwischengespeichert.
Überprüfen Sie auch, wie das Zwischenspeichern von benutzerdefinierten Blöcken deaktiviert wird
Bearbeiten: Eine einzelne
cacheable="false"
Seite deaktiviert das vollständige Seiten-Caching für die gesamte Seite, wodurch die Seitenbeschaffung aus dieser Layoutdatei extrem langsam wird! Überprüfen Sie https://inviqa.com/blog/how-full-page-cache-works-magento-2quelle
Es ist wichtig zu verstehen, warum Sie Block nicht zwischenspeichern möchten. Wenn dies einige sitzungsspezifische Informationen anzeigen soll, sollten Sie nachsehen
Eine nicht empfohlene Option könnte auch ein benutzerdefinierter Controller sein, der einige Daten über einen Ajax-Aufruf zurückgibt (mit der POST-Methode, damit sie nicht zwischengespeichert werden).
(!) cacheable = "false" darf nicht verwendet werden. Hier folgt, WARUM nicht:
Ein Block mit cacheable = "false" hebt den Cache der gesamten Seite auf. Es wird nicht zum Lochen im Cache verwendet. Dies sagt auch die folgende Seite aus ( Um eine nicht zwischenspeicherbare Seite zu erstellen , markieren Sie einen Block auf dieser Seite im Layout mit cacheable = "false" als nicht zwischenspeicherbar ):
Was es tut, ist, dass Varnish / Fastly-Module aufgrund dieses Attributwerts immer nicht zwischenspeicherbare Header senden.
Wenn wir cachable = "false" aktivieren und Varnish / Fastly verwenden, werden auf der Browserseite folgende Header gesendet:
Dafür kann der Seiten-Caching-Code des Magento auf debuggt werden
Wobei erstens öffentliches Cache-Control mit TTL und zweitens X-Magento-Tags für Varnish / Fastly gesendet werden sollen.
Beide verwenden die isCacheable () - Prüfung, wobei diese aufgrund der folgenden Prüfung immer FALSE zurückgibt (prüfen Sie, ob im aktuellen Layout Attribute vorhanden sind: cacheable = "false"):
Wenn wir cacheable = "false" entfernen, beginnen wir, isCacheable () -Prüfungen als TRUE abzurufen und die Header auf Start- / Kategorie- / Produktseiten korrekt abzurufen.
quelle
Ich habe
non-cacheable
für die Preisgestaltung gesperrtquelle
di.xml
Sie können nicht zwischenspeicherbare Blöcke nur zu benutzerdefinierten Seiten hinzufügen. Andernfalls funktioniert der Magento-Seiten-Cache für diese Seiten nicht ODER aktualisiert die Informationen blockweise über Ajax (Magento-Abschnittsanforderungen).
Einige der hier beschriebenen Dinge https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
quelle