protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
tidak bekerja. Mengapa? Bagaimana cara menonaktifkan cache untuk blokir?
Jawaban:
Blok dapat ditetapkan sebagai non-cacheable dengan mengatur
cacheable
atributfalse
dalam tata letak file XML. Sebagai contoh<block class="Block\Class" name="blockname" cacheable="false" />
Halaman yang mengandung blok seperti itu tidak di-cache.
Juga periksa Bagaimana cara menonaktifkan caching blok khusus
Sunting: Satu
cacheable="false"
akan menonaktifkan Caching Halaman Penuh untuk seluruh halaman, membuat halaman sumber dari file tata letak itu sangat lambat! Periksa https://inviqa.com/blog/how-full-page-cache-works-magento-2sumber
Penting untuk memahami mengapa Anda tidak ingin memblokir cache. Jika ini dimaksudkan untuk menampilkan beberapa informasi spesifik sesi maka Anda harus melihat ke dalamnya
Salah satu opsi yang tidak direkomendasikan bisa juga kontroler kustom yang mengembalikan beberapa data melalui panggilan ajax (dengan metode POST sehingga tidak akan di-cache).
(!) cacheable = "false" tidak boleh digunakan. Di sini akan mengikuti, MENGAPA tidak:
Blok dengan cacheable = "false" akan membuat seluruh halaman tidak di-cache. Ini tidak digunakan untuk meninju lubang cache. Halaman berikut juga mengatakan ini ( Untuk membuat halaman yang tidak bisa di-cache , tandai semua blok pada halaman itu sebagai tidak bisa di-cache dalam layout menggunakan cacheable = "false" ):
Apa yang dilakukannya adalah modul Varnish / Fastly akan mengirimkan karena nilai atribut ini selalu non-cacheable header.
Ketika kami mengaktifkan cachable = "false" dan saat menggunakan Varnish / Fastly maka header browser berikut header dikirim:
Untuk itu dapat di debugged kode caching halaman Magento aktif
di mana yang pertama harus mengirim Cache-Control publik dengan TTL dan yang kedua harus mengirim X-Magento-Tag untuk Varnish / Fastly.
Keduanya menggunakan isCacheable () periksa di mana ini selalu mengembalikan FALSE karena cek berikut (periksa apakah dalam tata letak saat ini ada atribut: cacheable = "false"):
Ketika kita menghapus cacheable = "false" maka kita mulai mendapatkan isCacheable () memeriksa sebagai TRUE dan juga mendapatkan header dengan benar di halaman start- / category- / product.
sumber
Saya telah membuat
non-cacheable
blok Hargasumber
di.xml
Anda dapat menambahkan hanya blok non-cacheable ke halaman khusus. Dalam kasus lain, Cache Halaman magento tidak akan berfungsi untuk halaman ini ATAU memperbarui informasi dalam blok melalui ajax (permintaan bagian magento).
Beberapa hal yang dijelaskan di sini https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
sumber