logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल
03/10/2025, by Ivan

Кэширование метаданных (cache tags, cache contexts और max-age) के साथ काम को आसान बनाने के लिए, Drupal 8 में CacheableDependencyInterface मौजूद है।

क्यों?

कल्पना कीजिए, अगर आपको हर ऑब्जेक्ट और कॉन्फ़िगरेशन ऑब्जेक्ट के cache tags को, जिन्हें आप render array (या किसी और गणना) में इस्तेमाल कर रहे हैं, मैन्युअल रूप से जोड़ना पड़े। और बहुभाषी साइट पर, आपको cache contexts को भी मैन्युअल रूप से जोड़ना पड़े (अनुवादित entity या कॉन्फ़िगरेशन ऑब्जेक्ट के लिए language override के आधार पर)।

और सिर्फ entities और configuration ही नहीं, बल्कि access results, block plugins, menu links, context plugins, condition plugins वगैरह भी — क्योंकि ये सब rendering (यानी एक विशेष प्रकार की गणना) पर खत्म होते हैं, जिसे हम cache करना चाहते हैं।

Drupal 8 के शुरुआती विकास चरणों में यह मैन्युअली होता था। यह स्पष्ट है कि यह अविश्वसनीय और बहुत error-prone था।

इसीलिए CacheableDependencyInterface को पेश किया गया। जैसा कि इसके नाम से पता चलता है: जो ऑब्जेक्ट इस इंटरफ़ेस को लागू करते हैं, वे ऑटोमैटिक रूप से cacheable dependencies बन जाते हैं।

उदाहरण के लिए, जब आप एक render array बना रहे हैं <p>Hi, %user, welcome to %site!</p>, तो आप वर्तमान User entity और system.site configuration पर निर्भर हैं। जब यह render array cache किया जाता है, तो इसमें यह user entity और यह configuration object cacheable dependencies के रूप में शामिल होते हैं।

CacheableDependencyInterface किसी भी value object (यानी डेटा की एक logical unit को दर्शाने वाले object) द्वारा implement किया जा सकता है। अगर आप इसकी API documentation देखें, तो पाएंगे कि Drupal 8 core में कई महत्वपूर्ण objects इसे implement करते हैं। दरअसल, यह कहना सुरक्षित है कि Drupal 8 कोड लिखते समय जिन अधिकांश objects से आप interact करते हैं, वे इसे implement करते हैं!

इसके दो आम चरम मामले भी हैं, जिनके लिए Drupal सुविधाजनक traits प्रदान करता है: एक immutable object का केस, जिसे हमेशा के लिए cache किया जा सकता है (UnchangingCacheableDependencyTrait, जो हमेशा max-age === permanent लौटाता है), और दूसरा ऐसा object जो हमेशा dynamic रूप से compute किया जाता है और कभी cache नहीं होता (UncacheableDependencyTrait, जो हमेशा max-age === 0 लौटाता है)।

RefinableCacheableDependencyInterface

लेकिन CacheableDependencyInterface सिर्फ "intrinsic", "canonical" cacheability metadata के साथ ही काम कर सकता है। कभी-कभी object के कई variants होते हैं।

सबसे सामान्य उदाहरण entity translations (एक ही entity अलग language translation के साथ) और configuration translations (एक ही configuration object अलग language override के साथ) हैं।

इन दोनों में, मूल object के cacheability metadata (जैसे node:5 cache tags) वैसे ही रहते हैं। लेकिन entity translation के केस में, language cache context ('languages:'. LanguageInterface::TYPE_CONTENT) जरूरी है। उसी तरह configuration object translation के लिए interface language cache context ('languages:'. LanguageInterface::TYPE_INTERFACE) जरूरी है।

एक और उदाहरण हो सकता है "Pirate Day" module, जो केवल Pirate Day पर config override लागू करता है (yar, har, parrots जोड़ते हुए)। तब configuration objects में pirate_day cache context होगा।

ऐसे मामलों में हमें अपने objects के cacheability metadata को refine करने की ज़रूरत होती है। इसके लिए RefinableCacheableDependencyInterface लाया गया। इसे आसान बनाने के लिए RefinableCacheableDependencyTrait भी है।

Entities और Configuration Objects के बारे में

Drupal 8 में सभी entities (core, contrib और custom) EntityInterface implement करते हैं, जो CacheableDependencyInterface और RefinableCacheableDependencyInterface दोनों को extend करता है। इसका मतलब: Drupal 8 में हर entity ऑटोमैटिक cache tags (जैसे node:5, user:3) और cache contexts (translations) लेकर आती है।

Drupal 8 core के सभी configuration objects ConfigBase extend करते हैं, जो दोनों interfaces implement करता है। यानी हर configuration object ऑटोमैटिक cache tags (config:system.performance जैसे) और cache contexts (translations) लेकर आता है।

आख़िर में, सभी entities और configuration objects language cache contexts (content और interface language के अनुसार) भी लेकर आते हैं, EntityManager::getTranslationFromContext() और LanguageConfigFactoryOverride::getCacheableMetadata() की वजह से।

Cacheable Dependencies वाले objects का उपयोग

Rendering सबसे सामान्य उदाहरण है। इसके लिए हमारे पास RendererInterface::addCacheableDependency($build, $dependency) है — जहां $build render array है और $dependency dependency object है। dependency के cache metadata को render array में "absorb" कर लिया जाता है।

पूरा उदाहरण देखने के लिए Render arrays की cacheability देखें।

एक और अच्छा उदाहरण access checks है, जो AccessResult objects लौटाते हैं। इनमें AccessResult::addCacheableDependency($dependency) method होता है।

संबंधित Interfaces और Classes

यह भी देखें