Update_post_ (मेटा / शब्द) की व्याख्या _cache


23

मैं 10up से कुछ सर्वोत्तम प्रथाओं को पढ़ रहा था और उन्होंने WP_Query में झूठे इन दो झंडों को स्थापित करने का उल्लेख किया है (यह निर्भर करता है कि आप क्या कर रहे हैं:)

  • 'update_post_meta_cache' => false: उपयोगी जब पोस्ट मेटा का उपयोग नहीं किया जाएगा।
  • 'update_post_term_cache' => false: उपयोगी जब वर्गीकरण की शर्तों का उपयोग नहीं किया जाएगा।

मैं मान रहा हूँ कि यह कुछ उपयोग कर रहा है, update_post_caches()लेकिन मैं 100% भी निश्चित नहीं हूं कि इसका क्या मतलब है। क्या कोई समझा सकता है कि इन दो झंडों का क्या मतलब है WP_Queryऔर ये कितने उपयोगी हैं? अधिक जानकारी के रूप में बेहतर के रूप में मैं एक पूरी तरह से पता नहीं है कि वर्डप्रेस कैसे चीजों को कैश करता है, लेकिन इन दो झंडों के बारे में एक अच्छी तरह से सोचा जवाब भी स्वीकार्य है।

जवाबों:


30

हर जगह वस्तु कैश

वर्डप्रेस यथासंभव डेटाबेस प्रश्नों की संख्या को कम करने की कोशिश करता है।

उदाहरण के लिए, कभी-कभी आपको मेटा फ़ील्ड या टैक्सोनॉमी फ़ील्ड प्राप्त होता है, डेटाबेस को क्वेरी करने से पहले, वर्डप्रेस दिखता है कि क्या पहले से ही कैश में संग्रहीत और संग्रहीत किया गया था, और डेटाबेस को क्वेरी करने के बजाय इसे वहाँ से लौटाता है।

"कैश जॉब" WP_Object_Cacheक्लास और wp_cache_*फ़ंक्शंस के माध्यम से किया जाता है (जो कि क्लास के तरीकों के लिए आवरण है।)

जहां कैश रहता है

डिफ़ॉल्ट रूप से, "कैश" PHP वैश्विक चर से अधिक कुछ नहीं है। इसका मतलब है कि यह स्मृति में है, लेकिन इसका मतलब यह भी है कि यह हर अनुरोध पर गायब हो जाता है।

हालांकि, ड्रॉपिन्स ( advanced-cache.phpऔर / या object-cache.php) के माध्यम से, इस कैश को संभालने के लिए कस्टम तरीके से सेटअप करना संभव है।

आमतौर पर, इस ड्रॉपइन का उपयोग किसी प्रकार के कैशिंग तंत्र को सेट करने के लिए किया जाता है जो एकवचन अनुरोधों को "जीवित" करता है।

इस कारण से, WP के लोगों के बीच, इन्हें "लगातार कैश" प्लगइन्स के रूप में जाना जाता है (भले ही बुलबुले के बाहर शब्द "कैश" और "लगातार" एक साथ बहुत अर्थ नहीं बनाते हैं)।

आजकल लोकप्रिय विकल्प मेमकेच्ड या रेडिस हैं

इसलिए "लगातार कैश" प्लगइन्स का उपयोग करके आप डेटाबेस प्रश्नों की संख्या को काफी कम कर सकते हैं, क्योंकि कैश हर अनुरोध पर अपडेट नहीं किया जाता है।

कुछ उदाहरण

$foo = get_post_meta('foo', $post_id, true);
// a lot of code in the middle
$bar = get_post_meta('bar', $post_id, true);

ऊपर दिए गए कोड की 2 लाइनें, अधिकतम 1 डेटाबेस क्वेरी को ट्रिगर करेंगी।

वास्तव में, जब आप एक कस्टम फ़ील्ड को क्वेरी करते हैं, तो उस पोस्ट के सभी फ़ील्ड डेटाबेस से पुनर्प्राप्त किए जाते हैं, ऑब्जेक्ट कैश के माध्यम से कैश किए जाते हैं, और बाद के अनुरोध कैश से डेटा खींचते हैं और डीबी से नहीं।

टैक्सोनॉमी शर्तों के लिए भी ऐसा ही होता है, वर्डप्रेस सभी शर्तों को एक बार टैक्सोनॉमी के लिए खींचता है, फिर उन्हें कैश से लौटाता है।

WordPress में Object cache का बहुत व्यापक रूप से उपयोग किया जाता है। न केवल पदों, मेटा वैल्यूज़ और टैक्सोनॉमी के लिए, बल्कि उपयोगकर्ताओं, टिप्पणियों, थीम डेटा के लिए भी ...

WP_Queryइन सबका क्या करना है?

जब आप कुछ पोस्ट को WP_Queryडिफ़ॉल्ट रूप से क्वेरी करते हैं , तो वर्डप्रेस न केवल उन्हें डेटाबेस से (या कैश से अगर वे कैश किए जाते हैं) खींचते हैं, बल्कि सभी कस्टम फ़ील्ड और खींची गई पोस्ट से संबंधित सभी टैक्सोनॉमियों के लिए कैश को अपडेट करते हैं

इसलिए जब आप कॉल करते हैं, उदाहरण के लिए, get_the_terms()या get_post_meta()जब लूपिंग पोस्ट के माध्यम से मिला WP_Query, तो आप वास्तव में किसी डेटाबेस क्वेरी को ट्रिगर नहीं करते हैं, लेकिन कैश से जानकारी खींचते हैं।

अच्छा है, यह नहीं है?

ठीक है, हाँ, लेकिन यह एक लागत के साथ आता है।

कैश अद्यतन "जादू" वर्डप्रेस करता है कि जब पुल पदों के माध्यम से WP_Queryमें होने update_meta_cacheमेटा के लिए और में update_object_term_cachetaxonomies के लिए।

यदि आप उन फ़ंक्शन के स्रोत कोड को देखते हैं, तो आप देखेंगे कि वर्डप्रेस प्रत्येक फ़ंक्शन में केवल एक डीबी क्वेरी करता है, लेकिन बहुत सारे प्रसंस्करण भी करता है। उदाहरण के लिए, update_object_term_cacheवहाँ 7 नेस्टेड हैंforeach ... यदि आपके पास बहुत सारे टैक्सोनॉमी हैं, और प्रति पृष्ठ पदों की संख्या अधिक है, तो यह बहुत अच्छा नहीं है।

उन WP_Queryतर्कों के बारे में , आखिरकार

कस्टम फ़ील्ड और टैक्सोनॉमी के लिए क्रमशः कैश को अपडेट करने के लिए वर्डप्रेस को रोकने के लिए क्या 'update_post_meta_cache'और 'update_post_term_cache'कब सेट करना falseहै।

उस स्थिति में, पहली बार किसी कस्टम फ़ील्ड या टैक्सोनॉमी को क्वेर किया जाता है, जिससे डेटाबेस क्वेरी ट्रिगर होती है, और डेटा कैश किया जाता है।

यह मुसीबत के लायक है?

हमेशा की तरह, जवाब यह निर्भर करता है । उन मानों को सेट करने के लिए अधिकांश समय false, एक अच्छा विकल्प है, क्योंकि यह अनावश्यक प्रसंस्करण और डेटाबेस प्रश्नों को रोकता है यदि आवश्यक नहीं है, और कैश वैसे भी अपडेट किया जाता है, जब पहली बार कस्टम क्षेत्र / वर्गीकरण की शर्तों की आवश्यकता होती है।

हालाँकि, यदि आप get_post_meta()लूप के दौरान एक बार भी कॉल करने जा रहे हैं, और आप get_the_terms()पोस्ट द्वारा समर्थित टैक्सोनोमी के सभी (या अधिकांश) के लिए कॉल करने जा रहे हैं , तो कैश अपडेट वैसे भी चालू हो जाता है, और इस पर कोई वास्तविक लाभ नहीं हो सकता है उन क्वेरी तर्क को सेट करना false


साफ! हमेशा की तरह आपकी जानकारी हमेशा जीएम की सराहना की है। क्या ग्राहकों को "लगातार कैश" माना जाएगा? तो आगे जाने के लिए, WP_Query के दौरान ऑब्जेक्ट कैश wp_reset_postdata()को रीसेट global $postऔर रीसेट करने का कारण है ? ऐसा लगता है कि अगर मैंने एक कस्टम WP_Query किया, तो यह एक नई कैश्ड वस्तु का निर्माण करेगा, लेकिन इसे रीसेट करने पर मूल कैश प्राप्त करने के लिए भी आवश्यकता होगी। या शायद मैं इस सवाल के संदर्भ में बहुत दूर हो रहा हूं।
Howdy_McGee

1
@Howdy_McGee ऑब्जेक्ट कैश और पोस्ट ऑब्जेक्ट संबंधित नहीं हैं। इसलिए wp_reset_postdata()ऑब्जेक्ट कैश के संबंध में कुछ भी न करें। wp_reset_postdata()केवल वैश्विक पोस्ट ऑब्जेक्ट रीसेट करें, जो कि अभी तक एक और वैश्विक चर है, जिसे कभी भी कैश नहीं किया गया है ... ग्राहक एक हाइब्रिड चीज हैं: जब आपके पास कुछ लगातार कैश प्लगइन स्थापित होता है, तो क्षणिक उपयोग होता है, लेकिन यदि आपके पास कोई निरंतर कैश प्लगइन नहीं है, तो ग्राहक डेटाबेस का उपयोग करें।
gmazzap

आह, मैंने सिर्फ global variableधारणा पर ध्यान दिया और मान लिया कि यह global $postया वैश्विक $wp_queryवस्तुएं हैं, स्पष्टीकरण के लिए धन्यवाद!
Howdy_McGee

एक सिडेनोट पर , fields => 'ids'दोनों कैश को सेट करता है false। मैं यह समझ में आता है कि एक वस्तु कैश केवल वस्तुओं पर काम करता है लगता है, लेकिन मैंने सोचा कि मैं सिर्फ एक उल्लेख होगा: डी
Howdy_McGee

3

यहां ब्याज की मुख्य बात update_post_cachesसमारोह है। WP_Query के सभी पोस्ट DB से प्राप्त करने के बाद इसे कॉल किया जाता है। आमतौर पर, जिस कारण से आप पोस्ट चाहते हैं, पहली बार में पोस्ट्स उन्हें प्रदर्शित करने के लिए होती हैं, जिसका अर्थ आमतौर पर मेटाडेटा के आधार पर शर्तों और कुछ को प्रदर्शित करने के लिए होता है, इसके बाद WP_Query डिफ़ॉल्ट क्वेरी द्वारा मेटा के लिए मेटा और टर्म डेटा से संबंधित पदों को भी प्रदर्शित करेगा। और इसे कैश स्टोर करता है *। यह जानकारी WP_Query से लौटाए गए डेटा में स्पष्ट रूप से उपलब्ध नहीं है, लेकिन जब आप किसी विशिष्ट पोस्ट की अवधि और मेटा जानकारी प्राप्त करने के लिए प्रासंगिक API को कॉल करेंगे, तो यह पहले से ही मेमोरी में उपलब्ध होगा और नई भेजने की कोई आवश्यकता नहीं होगी डीबी को क्वेरी।

यह प्रत्येक पोस्ट के लिए अनुरोध भेजने के बजाय सभी पदों के लिए जानकारी प्राप्त करने के लिए केवल एक अनुरोध भेजकर डीबी को अनुरोध भेजने से संबंधित ओवरहेड को कम करने में सक्षम बनाता है।

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

* कैश - यहां सबसे महत्वपूर्ण मेमोरी आधारित कैश है जिसमें WP सब कुछ स्टोर करता है जो कि किसी भी ऑब्जेक्ट कैशिंग प्लगइन को सक्रिय किए बिना भी DB से प्राप्त करता है। जाहिर है जब आपके पास ऑब्जेक्ट कैशिंग है तो सूचना को वहां भी संग्रहीत किया जाएगा।

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