สิ่งสำคัญคือต้องเข้าใจว่าทำไมคุณไม่ต้องการแคชบล็อก หากนี่หมายถึงการแสดงข้อมูลเฉพาะของเซสชันคุณควรพิจารณา
ตัวเลือกที่ไม่แนะนำตัวเลือกหนึ่งอาจเป็นคอนโทรลเลอร์ที่กำหนดเองซึ่งจะส่งคืนข้อมูลบางส่วนผ่าน ajax-call (ด้วยวิธี POST- ดังนั้นจึงไม่ถูกแคช)
(!) cacheable = "false" จะต้องไม่ถูกนำมาใช้ ที่นี่จะตามมาทำไมไม่:
บล็อกที่มี cacheable = "false" จะทำให้หน้าเว็บเต็มหน้า ไม่ได้ใช้สำหรับการเจาะรูแคช หน้าต่อไปจะกล่าวว่าสิ่งนี้ ( ในการสร้างหน้าที่ไม่สามารถเข้าถึงได้ให้ทำเครื่องหมายบล็อกใด ๆ บนหน้านั้นว่าไม่สามารถเข้าถึงได้ในเค้าโครงโดยใช้ cacheable = "false" ):
สิ่งที่ทำคือโมดูล Varnish / Fastly จะส่งเนื่องจากค่าคุณลักษณะนี้มักจะเป็นส่วนหัวที่ไม่สามารถแคชได้
เมื่อเราเปิดใช้งาน cachable = "false" และในขณะที่ใช้ Varnish / Fastly แล้วเบราว์เซอร์ด้านต่อไปนี้จะถูกส่งไป:
X-Magento-Cache-Debug:MISS
X-Magento-Cache-Control:max-age=0, must-revalidate, no-cache, no-store
Age: 0
สำหรับสิ่งที่สามารถ debugged รหัสแคชหน้าของวีโอไอพี
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGenerateXml
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGetOutput
โดยที่อันแรกควรส่งการควบคุมแคชสาธารณะด้วย TTL และอันดับที่สองควรส่ง X-Magento-Tags สำหรับ Varnish / Fastly
ทั้งคู่กำลังใช้ isCacheable () ตรวจสอบว่านี่จะส่งกลับค่า FALSE เสมอเนื่องจากการตรวจสอบต่อไปนี้ (ตรวจสอบว่าในเค้าโครงปัจจุบันมีแอตทริบิวต์ใด ๆ หรือไม่: cacheable = "false"):
$cacheableXml = !(bool)count($this->getXml()->xpath('//' . Element::TYPE_BLOCK . '[@cacheable="false"]'));
เมื่อเราลบ cacheable = "false" จากนั้นเราก็เริ่มรับ isCacheable () ตรวจสอบว่าเป็น TRUE และรับส่วนหัวอย่างถูกต้องใน start- / category- / productpages
X-Magento-Cache-Control:max-age=86400, public, s-maxage=86400
X-Magento-Cache-Debug:HIT
X-Magento-Cache-Hits:1
Age:32