1. WP_Query चलाने से पहले क्वेरी सेट करें
SQL क्वेरी को चलाने से पहले, क्वेरी को बदलने का एकमात्र अवसर होने के बाद से डेटाबेस प्रश्नों को न्यूनतम रखने की कोशिश करते समय यह सबसे महत्वपूर्ण बात लगती है।
सामान्य क्वेरी
सामान्य क्वेरी के लिए, वर्डप्रेस wp()
फ़ंक्शन का उपयोग करता है , जो बदले में कॉल करता है $wp->main( $query_vars )
। सशर्त टैग से "is_ वैरिएबल" उन्हें पास करने से पहले सेट किया जाता है WP_Query->get_posts()
, जो इसे MySQL डेटाबेस क्वेरी में परिवर्तित करता है और अंत में उन्हें $ wp_query ऑब्जेक्ट में संग्रहीत करता है। SQL डेटाबेस में वास्तव में चलाने से पहले क्वेरी को फ़िल्टर करना संभव है ।
pre_get_posts
कार्रवाई इस प्रक्रिया में हुक, इससे पहले कि यह करने के लिए पारित हो जाता है तो आप क्वेरी को परिवर्तित करने के लिए अनुमति WP_Query->get_posts()
।
उदाहरण के लिए, यदि आप "विशेष रुप से" श्रेणी में पदों के लिए क्वेरी को फ़िल्टर करना चाहते हैं, तो आप सशर्त टैग का उपयोग add_action( 'pre_get_posts', 'your_function_name' );
और शामिल करेंगे ।in_category
your_function_name
function your_function_name( $query ) {
if ( $query->in_category( 'featured' ) && $query->is_main_query() ) {
// Replace 123 with the category ID of the featured category.
$query->set( 'cat', '123' );
}
}
add_action( 'pre_get_posts', 'your_function_name' );
देखें प्लग इन API / कार्रवाई संदर्भ / पदों «वर्डप्रेस कोडेक्स प्राप्त पूर्व
पृष्ठ अनुरोध
पृष्ठ टेम्पलेट के लिए, जैसे "चित्रित" श्रेणी के लिए संग्रह पृष्ठ, सशर्त टैग pre_get_posts
फ़िल्टर से काम नहीं करेंगे । उदाहरण के लिए, आप is_category
संग्रह पृष्ठ की जांच करने के लिए उपयोग नहीं कर सकते क्योंकि WP_Query नहीं चला है।
इसके बजाय, आपको पृष्ठ अनुरोधों के लिए मुख्य क्वेरी को बदलना new WP_Query
होगा जिसके साथ कुछ ऐसा दिखेगा $query = new WP_Query( 'cat=123' );
। यह क्वेरी को शुरू से ही उपयुक्त तर्क के साथ चलाता है।
देखें क्लास संदर्भ / WP क्वेरी «वर्डप्रेस कोडेक्स
2. डेटाबेस के लिए बचत
आप यह wp_insert_post_data
सुनिश्चित करने के लिए फ़िल्टर का उपयोग कर सकते हैं कि आपके कस्टम पोस्ट प्रकार के लिए प्रासंगिक केवल $ डेटा वापस कर दिया जाए wp_insert_post
। अपने कस्टम पोस्ट प्रकार की जांच के लिए एक सशर्त विवरण शामिल करना सुनिश्चित करें।
प्लगइन एपीआई / फ़िल्टर संदर्भ / wp डालने पोस्ट डेटा «वर्डप्रेस कोडेक्स
इस हुक को wp_insert_post
फ़ंक्शन द्वारा कहा जाता है , जिसे wp_update_post द्वारा कॉल किया जाता है जब आप अपने कस्टम पोस्ट प्रकार को अपडेट करते हैं, आमतौर पर एक ड्राफ्ट को सहेजकर या पोस्ट प्रकाशित करके।
आपको इसे स्वयं बेंचमार्क करना होगा यद्यपि मैं व्यक्तिगत रूप से डेटाबेस में अपडेट किए गए डेटा को कम करने के अनुकूलन महत्व के रूप में नहीं बोल सकता हूं।
3. क्या कस्टम पोस्ट प्रकार प्रदर्शन को प्रभावित करते हैं?
मेरे अनुभव में, कस्टम पोस्ट प्रकार सामग्री के प्रबंधन के लिए एक शक्तिशाली उपकरण हैं। मुझे उन सभी तरीकों से पदों को प्रबंधित करने के किसी भी अन्य तरीके के बारे में नहीं पता है जो इसे इस तरीके से अनुमति देता है जो कम संसाधनों का उपयोग करेगा। मैं व्यक्तिगत रूप से जहाँ भी संभव हो प्रश्नों की संख्या कम करने के तरीके खोजने पर ध्यान केंद्रित करूँगा।
पर्मलिंक संरचना से संबंधित एक प्रदर्शन मुद्दा हुआ करता था, जिससे यह एक संख्या के बजाय पाठ से शुरू होने पर हिट हो जाता था। 3 यह बड़ी संख्या में पृष्ठों की मेजबानी करने वाली साइटों के लिए विशेष रूप से परेशानी थी, लेकिन वर्डप्रेस संस्करण 3.3 के बाद से हल किया गया है।
मैं केवल यहां पेर्मलिंक ला रहा हूं क्योंकि स्लग आमतौर पर पर्मलिंक संरचना का पहला हिस्सा है जो कि संस्करण 3.3 से पहले प्रदर्शन को प्रभावित कर सकता है या नहीं भी कर सकता है। इसके अलावा मुझे किसी भी प्रकार के प्रदर्शन के मुद्दों की जानकारी नहीं है, जो कस्टम पोस्ट प्रकारों के उपयोग से उत्पन्न होते हैं।
अन्य प्रदर्शन विकल्प
ग्राहक
यह आपके कोड में न्यूनतम के लिए प्रश्नों को रखने के लिए एक प्रतिस्थापन नहीं है, लेकिन आप कुछ समय के लिए प्रश्नों को संग्रहीत करने के लिए set_transient का उपयोग कर सकते हैं ताकि नए प्रश्न आवश्यक न हों। डेव क्लेमेंट्स पोस्ट में इसका उदाहरण दिया गया है । साथ ही, ध्यान दें कि वह save_post
किसी भी समय किसी पोस्ट प्रकार के अद्यतन होने पर क्षणिक को हटाने के लिए एक क्रिया जोड़ने की अनुशंसा करता है।
<?php // IN THE SPOTLIGHT QUERY
if( false === ( $its_query = get_transient( 'its_query' ) ) ) {
$pttimestamp = time() + get_option('gmt_offset') * 60*60;
$its_query = new WP_Query( array(
'post_type' => 'spotlight',
'posts_per_page' => 1,
'post__not_in' => $do_not_duplicate,
'meta_query' => array(
array(
'key' => '_hpc_spotlight_end_time',
'value' => $pttimestamp,
'compare' => '>'
)
)
) );
set_transient( 'its_query', $its_query, 60*60*4 );
}
if( have_posts() ) { // HIDE SECTION IF NO CURRENT ITS FEATURE ?>
// LOOP GOES HERE: NOT IMPORTANT TO EXAMPLE
<?php } ?>
अधिक क्वेरी अनुकूलन
थॉमस ग्रिफिन अपने ऑप्टिमाइज़ वर्डप्रेस क्वेरीज़ ट्यूटोरियल में कुछ अच्छे सुझाव हैं । यहां उनके सुझावों की एक संक्षिप्त सूची दी गई है:
'cache_results' => false
यदि आपका सर्वर मेम्नेच्ड जैसे लगातार कैशिंग का उपयोग नहीं कर रहा है तो एकबारगी प्रश्नों में सेट करें । एक-बंद प्रश्नों को "प्रश्नों के रूप में वर्णित किया जाता है जो कि छोटी मात्रा में डेटा दिखाने के लिए उपयोग किए जाते हैं। यह हो सकता है कि आप वर्तमान पोस्ट से संबंधित लिंक किए गए पोस्ट शीर्षक प्रदर्शित करना चाहते हैं, या आप का चयन करने के लिए पोस्ट की एक ड्रॉपडाउन प्रदर्शित करना चाह सकते हैं। एक विशेष विकल्प सेटिंग। "
उसका उदाहरण: $query = get_posts( array( 'posts_per_page' => 1,
'cache_results' => false ) );
सेट करें 'no_found_rows' => true
जहाँ पेजिंग की आवश्यकता नहीं है। यह "MySQL के परिणामों की गणना करके यह देखेगा कि हमें अंकुरण की आवश्यकता है या नहीं।"
उसका उदाहरण: $query = new WP_Query( array( 'posts_per_page' => 1,
'no_found_rows' => true ) );
पोस्ट आईडी के लिए क्वेरी केवल अगर यह आप सभी की जरूरत 'fields' => 'ids'
है get_posts
। यह महत्वपूर्ण रूप से वापस किए जा रहे डेटा की मात्रा को कम करना चाहिए, जो कि डेटाबेस विवरण «वर्डप्रेस कोडेक्स को देखने पर प्रति पोस्ट बहुत अधिक है
उसका उदाहरण: $query = get_posts( array( 'posts_per_page' => 1,
'fields' => 'ids' ) );
उस अंतिम टिप के अलावा, एक ही तर्क तब लागू किया जा सकता है जब आपको get_post_field का उपयोग करके केवल एक या कुछ पोस्ट फ़ील्ड की आवश्यकता होती है ।
क्वेरी कैसे काम करती है, इसकी ठोस समझ होना आवश्यक है। जितना अधिक विशिष्ट आप अपने प्रश्नों के साथ हो सकते हैं, उतना कम काम आप अपने SQL डेटाबेस से मांग करेंगे। इसका मतलब है कि डेटाबेस प्रश्नों के प्रबंधन के लिए बड़ी संख्या में संभावनाएं हैं। जहां तक वे चलते हैं, कस्टम प्रश्नों से सावधान रहें (क्या यह एक व्यवस्थापक पृष्ठ है?), प्रत्यक्ष प्रश्नों में उचित स्वच्छता का उपयोग करें और मूल वर्डप्रेस फ़ंक्शंस का उपयोग करने का प्रयास करें जहां यह आपको उसी प्रदर्शन को प्राप्त करने की अनुमति देता है।