protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
nie działa. Czemu? Jak wyłączyć pamięć podręczną dla bloku?
Odpowiedzi:
Bloki można ustawić jako nie do buforowania, ustawiając
cacheable
atrybutfalse
w plikach XML układu. Na przykład<block class="Block\Class" name="blockname" cacheable="false" />
Strony zawierające takie bloki nie są buforowane.
Sprawdź także, jak wyłączyć buforowanie niestandardowego bloku
Edycja: Pojedyncza
cacheable="false"
wyłączy Pełne buforowanie stron dla całej strony, dzięki czemu pobieranie stron z tego pliku układu będzie bardzo wolne! Sprawdź https://inviqa.com/blog/how-full-page-cache-works-magento-2źródło
Ważne jest, aby zrozumieć, dlaczego nie chcesz buforować bloku. Jeśli ma to na celu pokazanie niektórych informacji specyficznych dla sesji, powinieneś przyjrzeć się temu
Jedną niezalecaną opcją może być również niestandardowy kontroler, który zwraca niektóre dane przez wywołanie ajax (z metodą POST, aby nie był buforowany).
(!) cacheable = „false” nie może być użyte. Oto, dlaczego nie:
Blok z cacheable = "false" spowoduje, że cała strona nie będzie buforowana. Nie służy do dziurkowania w pamięci podręcznej. Mówi to również następująca strona ( aby utworzyć stronę nieuleczalną , zaznacz dowolny blok na tej stronie jako nieuleczalny w układzie, używając cacheable = "false" ):
Działa to tak, że moduły Varnish / Fastly będą wysyłane, ponieważ ta wartość atrybutu zawsze nie nadaje się do buforowania nagłówków.
Kiedy włączymy cachable = "false" i podczas używania Varnish / Fastly, wysyłane są następujące nagłówki:
W tym celu można debugować kod buforowania stron Magento
gdzie pierwszy powinien wysłać publiczną kontrolę pamięci podręcznej z TTL, a drugi - X-Magento-Tags dla Varnish / Fastly.
Oba używają sprawdzania isCacheable (), gdzie zawsze zwraca FAŁSZ z powodu następującego sprawdzenia (sprawdź, czy w bieżącym układzie są jakieś atrybuty: cacheable = "false"):
Kiedy usuwamy cacheable = "false", wtedy zaczynamy sprawdzać isCacheable () jako PRAWDA, a także poprawnie otrzymywać nagłówki na stronach start- / category- / product.
źródło
Zrobiłem
non-cacheable
dla bloku cenowegoźródło
di.xml
Możesz dodać blok, którego nie można buforować, tylko do niestandardowych stron. W innym przypadku pamięć podręczna strony magento nie będzie działać dla tych stron LUB aktualizacji informacji w bloku za pośrednictwem ajax (żądania sekcji magento).
Niektóre rzeczy opisane tutaj https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
źródło