Magento 2 में ब्लॉक के लिए कैश को अक्षम कैसे करें?


23
protected function _construct()
    {
        $this->addData(
            [
                'cache_lifetime' => false,
                'cache_tags' => array('MY_BLOCK'),
            ]
        );
    }

    public function getCacheKeyInfo()
    {
        return [];
    }

काम नहीं करता। क्यूं कर? ब्लॉक के लिए कैश को कैसे निष्क्रिय करें?


मुझे संदेह है कि आपका ब्लॉक किसी अन्य ब्लॉक के अंदर है जो कैश भी है। उदाहरण के लिए, आपके द्वारा फुटर ब्लॉक के अंदर रखी गई कोई भी चीज कैश नहीं की जाती है क्योंकि फूटर ब्लॉक आउटपुट कैश किया जाता है।
स्मार्टी

@Smartie इसे मुझे कैसे बंद करना है? <ReferenceContainer का नाम = "सामग्री"> <ब्लॉक वर्ग = "वर्ग" टेम्पलेट = "block.phtml" से पहले = "product.info.main" /> </ referenceContainer>
gebuket

जवाबों:


27

ब्लॉक को एक्सएमएल फाइलों में लेआउट की cacheableविशेषता falseको सेट करके गैर-कैचवेबल के रूप में सेट किया जा सकता है । उदाहरण के लिए

<block class="Block\Class" name="blockname" cacheable="false" />

ऐसे ब्लॉक वाले पृष्ठ कैश नहीं हैं।

यह भी जांचें कि कस्टम ब्लॉक की कैशिंग अक्षम कैसे करें

संपादित करें: एक एकल cacheable="false"पूरे पृष्ठ के लिए पूर्ण पृष्ठ कैशिंग को अक्षम कर देगा, जिससे पृष्ठ उस लेआउट फ़ाइल से सोर्सिंग बेहद धीमी हो जाएगी! Https://inviqa.com/blog/how-full-page-cache-works-magento-2 चेक करें


20
यह बहुत अनुचित है, एक एकल cacheable = "गलत" पूरे पृष्ठ के लिए पूर्ण पृष्ठ कैशिंग को अक्षम कर देगा, जिससे पृष्ठ उस लेआउट फ़ाइल से सोर्सिंग बेहद धीमी हो जाएगी!
दिमित्री सॉलोगेबेंको

यह सही है कि यह पूरे पृष्ठ के लिए कैश को अक्षम कर देगा और पहले ही उल्लेख किया गया url में मैंने magento.stackexchange.com/a/93473/9169 साझा किया है । यदि आपके पास एक अलग दृष्टिकोण है तो इसे नए उत्तर के रूप में साझा करने के लिए स्वतंत्र महसूस करें।
15

इस लेख को पढ़ें, महान विवरण: inviqa.com/blog/how-full-page-cache-works-magento-2
दिमित्री Sologoubenko

बहुत बढ़िया समाधान। आकर्षण जैसा काम।
जलप्रेश पटेल

यह प्रदर्शन के लिए एक बुरा विचार है। = (
किर्बी

15

यह समझना महत्वपूर्ण है कि आप कैश ब्लॉक क्यों नहीं करना चाहते हैं। यदि यह कुछ सत्र विशिष्ट जानकारी दिखाने के लिए है तो आपको इस पर ध्यान देना चाहिए

एक गैर-अनुशंसित विकल्प कस्टम नियंत्रक भी हो सकता है जो अजाक्स-कॉल पर कुछ डेटा लौटाता है (POST- विधि के साथ तो इसे समाप्त नहीं किया जाएगा)।

(!) cacheable = "गलत" का उपयोग नहीं किया जाना चाहिए। यहाँ का पालन करेंगे, क्यों नहीं:

कैशेबल के साथ एक ब्लॉक = "झूठा" पूरे पृष्ठ को बिना पढ़े बना देगा। इसका उपयोग कैश-छेद-छिद्रण के लिए नहीं किया जाता है। इसके बाद का पेज भी यह कहता है ( एक अनचाहे पेज को बनाने के लिए , उस पेज पर किसी भी ब्लॉक को कैशेबल = "गलत" का उपयोग करके लेआउट में उपलब्ध होने के रूप में चिह्नित करें ):

यह क्या करता है कि वार्निश / फास्टली मॉड्यूल इस विशेषता मान के कारण हमेशा गैर-उपलब्ध हेडर भेजते रहेंगे।

जब हम कैशलेस = "झूठा" सक्षम करते हैं और वार्निश / फास्ट का उपयोग करते समय तब हेडर के बाद ब्राउज़र साइड भेजा जाता है:

X-Magento-Cache-Debug:MISS
X-Magento-Cache-Control:max-age=0, must-revalidate, no-cache, no-store
Age: 0

इसके लिए Magento के पेज कैशिंग कोड को डीबग किया जा सकता है

vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGenerateXml
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGetOutput

जहां पहले टीटीएल के साथ सार्वजनिक कैश-कंट्रोल भेजना चाहिए और दूसरे को वार्निश / फास्ट के लिए एक्स-मैगेंटो-टैग भेजना चाहिए।

दोनों iscacheable () चेक का उपयोग कर रहे हैं, जहां यह हमेशा चेक के बाद FALSE लौटाता है (यदि वर्तमान लेआउट में कोई विशेषता है तो चेक करें: cacheable = "false"):

$cacheableXml = !(bool)count($this->getXml()->xpath('//' . Element::TYPE_BLOCK . '[@cacheable="false"]'));

जब हम cacheable = "false" को हटाते हैं, तब हम iscacheable () को TRUE के रूप में जाँचना शुरू करते हैं और प्रारंभ- / श्रेणी- / उत्पादपृष्ठों पर सही ढंग से हेडर प्राप्त करते हैं।

X-Magento-Cache-Control:max-age=86400, public, s-maxage=86400
X-Magento-Cache-Debug:HIT
X-Magento-Cache-Hits:1
Age:32

8

मैंने non-cacheableप्राइसिंग ब्लॉक के लिए बनाया है

<?php

namespace Custom\Module\Block\Pricing\Render;

class ExtendFinalPriceBox extends \Magento\Catalog\Pricing\Render\FinalPriceBox {

    public function getCacheLifetime()
    {
        return null;
    }

}

आपने Di.xml का उपयोग करके ExtendPriceBox के साथ फ़ाइनलप्राइसबॉक्स को कैसे बदला?
सिद्धेश

हां का उपयोग करdi.xml
लीड डेवलपर

0

आप केवल कस्टम पृष्ठों में गैर-संग्रहणीय ब्लॉक जोड़ सकते हैं। अन्य मामलों में, Magento Page Cache इन पृष्ठों के लिए काम नहीं करेगा या ajax (magento अनुभाग अनुरोध) के माध्यम से ब्लॉक में जानकारी अपडेट करेगा।

यहाँ वर्णित कुछ बातें https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.