Magento 2 এ ব্লকের জন্য ক্যাশে অক্ষম করবেন কীভাবে?


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

    public function getCacheKeyInfo()
    {
        return [];
    }

কাজ করে না. কেন? কীভাবে ব্লকের জন্য ক্যাশে অক্ষম করবেন?


আমি সন্দেহ করি যে আপনার ব্লকটি অন্য একটি ব্লকের ভিতরে রয়েছে যা ক্যাশেড। উদাহরণস্বরূপ, ফুটার ব্লকের ভিতরে আপনি যা কিছু রেখেছেন তা ক্যাশ করা হয়েছে কারণ ফুটার ব্লকের আউটপুট ক্যাশে হয়েছে।
স্মার্টি

@ স্মার্ট আমাকে কীভাবে এটি বন্ধ করবেন? <संदर्भকন্টেনারের নাম = "সামগ্রী"> <ব্লক শ্রেণি = "শ্রেণি" টেম্পলেট = "block.phtml" এর আগে = "product.info.main" /> </referencesContainer>
জেবুক

উত্তর:


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
এটি অত্যন্ত অনুপযুক্ত, একটি একক ক্যাশেবল = "মিথ্যা" পুরো পৃষ্ঠার জন্য পুরো পৃষ্ঠা ক্যাচিংকে অক্ষম করবে, যা সেই বিন্যাস ফাইলটি থেকে পৃষ্ঠাগুলি সোর্সিংকে অত্যন্ত ধীর করে দেবে!
দিমিত্রি সোলোগুবেনকো

এটি সঠিক যে এটি পুরো পৃষ্ঠার জন্য ক্যাশে অক্ষম করবে এবং ইতিমধ্যে আমি যে ইউআরএলটি magento.stackexchange.com/a/93473/9169 ভাগ করেছি তা ইউআরএলটিতে উল্লেখ করেছে । আপনার যদি অন্যরকম দৃষ্টিভঙ্গি থাকে তবে নির্দ্বিধায় এটিকে একটি নতুন উত্তর হিসাবে ভাগ করে নিন।
অমিতশ্রী

এই নিবন্ধটি পড়ুন, দুর্দান্ত ব্যাখ্যা: inviqa.com/blog/how-full-page-cache-works-magento-2
দিমিত্রি সোলোগোবেনকো

দুর্দান্ত সমাধান। মোহন মত কাজ।
জলপেশ প্যাটেল

পারফরম্যান্সের জন্য এটি একটি খারাপ ধারণা। = (
কারবি

15

আপনি কেন ক্যাশে করতে চান না তা বোঝা গুরুত্বপূর্ণ। যদি এটি কিছু সেশনের নির্দিষ্ট তথ্য প্রদর্শন করে বোঝানো হয় তবে আপনার উচিত

একটি অ-প্রস্তাবিত বিকল্প কাস্টম নিয়ামকও হতে পারে যা এজ্যাক্স-কলের মাধ্যমে কিছু ডেটা ফেরত দেয় (POST- পদ্ধতির সাথে যাতে এটি ক্যাশে হয় না)।

(!) ক্যাশেযোগ্য = "মিথ্যা" ব্যবহার করা উচিত নয়। এখানে অনুসরণ করা হবে, কেন নয়:

ক্যাশেবল = "মিথ্যা" সহ একটি ব্লক পুরো পৃষ্ঠাটি আনচান করে দেবে। এটি ক্যাশে হোল-পাঞ্চিংয়ের জন্য ব্যবহৃত হয় না। এছাড়াও নিম্নলিখিত পৃষ্ঠাটি এটি বলেছে ( একটি অপ্রয়োজনীয় পৃষ্ঠা তৈরি করতে , সেই পৃষ্ঠার যে কোনও ব্লককে ক্যাশেবল = "মিথ্যা" ব্যবহার করে বিন্যাসে অপ্রয়োজনীয় হিসাবে চিহ্নিত করুন ):

এটি যা করে তা হ'ল বার্নিশ / দ্রুত মডিউলগুলি এই বৈশিষ্ট্যটির মানটি সর্বদা নন-ক্যাশেযোগ্য শিরোনামের কারণে প্রেরণ করবে।

আমরা যখন ক্যাচেবল = "মিথ্যা" সক্ষম করি এবং বার্নিশ / দ্রুত ব্যবহার করার পরে ব্রাউজারের পাশের নীচের শিরোনামগুলি প্রেরণ করা হয়:

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

তার জন্য ম্যাজেন্টোর পৃষ্ঠায় ক্যাচিং কোডটি ডিবাগ করা যেতে পারে

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

যেখানে প্রথমে টিটিএল দিয়ে সর্বজনীন ক্যাশে-নিয়ন্ত্রণ প্রেরণ করা উচিত এবং দ্বিতীয়টি বার্নিশ / দ্রুততার জন্য এক্স-ম্যাজেন্টো-ট্যাগ প্রেরণ করা উচিত।

উভয়ই আইসকেচেবল () চেক ব্যবহার করছে যেখানে এটি সর্বদা নিম্নলিখিত চেকের কারণে FALSE ফেরত দেয় (বর্তমান লেআউটে কোনও বৈশিষ্ট্য রয়েছে কিনা তা পরীক্ষা করুন: ক্যাশেবল = "মিথ্যা"):

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

আমরা যখন ক্যাশেবল = "মিথ্যা" অপসারণ করি তখন আমরা ইস-ক্যাশেযোগ্য () চেকগুলি সত্য হিসাবে পেতে শুরু করি এবং শুরু- / বিভাগ- / প্রোডাক্ট পৃষ্ঠাতে সঠিকভাবে শিরোনাম পাই get

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
লিড বিকাশকারী

0

আপনি কেবল কাস্টম পৃষ্ঠাগুলিতে নন-ক্যাশেবল ব্লক যুক্ত করতে পারেন। অন্য ক্ষেত্রে, ম্যাজেন্টো পেজ ক্যাশে এই পৃষ্ঠাগুলির জন্য কাজ করবে না বা অজ্যাক্সের মাধ্যমে ব্লকের তথ্য আপডেট করবে (ম্যাজেন্টো বিভাগের অনুরোধগুলি)।

এখানে বর্ণিত কিছু জিনিস https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.