जब हम बस add_filter का उपयोग कर सकते हैं, तो add_action का उपयोग करने लायक है?


10

मैंने अभी वर्डप्रेस कोड में देखा है और इसे add_action की परिभाषा मिली है:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

अब हम एक CPU फ़ंक्शन को केवल दूसरे फ़ंक्शन को कॉल करने के लिए क्यों बर्बाद कर रहे हैं जिसे हम बस खुद कर सकते हैं और फिर हमें एक ही चीज़ के लिए दो अलग-अलग फ़ंक्शन नामों को याद नहीं करना होगा।


क्या यही कारण है कि चीजें add_action और add_filter रिटर्न मानों के साथ भिन्न हैं? wordpress.stackexchange.com/questions/283564/…
mahatmanich

जवाबों:


9

क्रियाएं बातें करती हैं। फिल्टर चीजों को संशोधित करते हैं। आप किसी एक्शन में सामान करते हैं, जबकि यदि आप एक फ़िल्टर लागू करते हैं, तो आप किसी भी ईवेंट या कार्यों के होने की उम्मीद नहीं करते हैं, आपके द्वारा फ़िल्टर किए जा रहे मूल्य के संशोधन के अलावा। उदा। ईमेल भेजना या फ़िल्टर में DB मान को सहेजना ठीक नहीं है, लेकिन यह एक क्रिया में ठीक है। दुर्लभ क्षण हो सकते हैं जब आपको इस सम्मेलन का उल्लंघन करने की आवश्यकता होती है, लेकिन यह एक उपयोगी और आवश्यक है।

सभी को बदलने add_actionऔर do_actionउनके फ़िल्टर समकक्षों के साथ कॉल करने से, आप भेद को हटा देते हैं और जैसे नाम 'the_content'आदि के ज्ञान को मजबूर करते हैं जैसे कि दुनिया से बाहर की क्रियाएं या फ़िल्टर हैं, और आपकी स्मृति में गलतियों को प्रोत्साहित करते हैं।

इसलिए अपने कोड को पढ़ने के लिए कठिन बनाने के बजाय, महसूस करें कि यदि आपका कोड धीमा है, तो ऐसा इसलिए नहीं है क्योंकि आपने एक निर्देश या दो को इधर-उधर नहीं किया है, यह या तो आपका धीमा सर्वर है, या आपके कोड का एल्गोरिथम संरचना है। डेटा की प्रकृति को संभाला जा रहा है। आपको अपनी प्रक्रियाओं को फिर से शुरू करने, हार्डवेयर को अपग्रेड करने या अपने प्रतिमानों को बदलने से बहुत अधिक मिलेगा। चीजों की भव्य योजना में एक धीमी साइट सबसे धीमी होने की संभावना है क्योंकि यह बहुत कुछ करती है या बुरी तरह से लिखित प्रश्न करती है, उदाहरण के लिए पोस्ट क्वेरी जो मेटा पर निर्भर करती है, या __not_inप्रश्न टाइप करती है

इसे परिप्रेक्ष्य में रखने के लिए, जब वर्डप्रेस चलता है, तो PHP लाखों निर्देशों को निष्पादित करता है । फिल्टर के लिए स्वैपिंग क्रियाएं मुश्किल से एक प्रतिशत के शीर्ष 1 हजारवें हिस्से में सेंध लगाती हैं।

http://fabien.potencier.org/article/8/print-vs-echo-which-one-is-faster

मैंने एक नए Wordpress स्थापना पर कोशिश की है। स्क्रिप्ट मेरे लैपटॉप पर "बस त्रुटि" के साथ समाप्त होने से पहले रुक जाती है, लेकिन opcodes की संख्या पहले से ही 2.3 मिलियन से अधिक थी । पर्याप्त कथन।

यदि आप वास्तव में कोशिश करना चाहते हैं, तो देखें कि कैसे लड़के ने VLD का उपयोग किया और अपने लिए अपने सिद्धांत का परीक्षण किया।


तो इसका मतलब है कि वास्तव में कोई अंतर नहीं है सिवाय इसके कि दो अलग-अलग नामों वाले व्यक्ति को बुलाने के लिए एक समान है .... बस एक जिसे हम उसे घर पर कहते हैं और एक हम उसे कार्यालय में बुलाते हैं :)
गगन

एक्शन फ़ंक्शंस द्वारा फ़िल्टर को लपेटना संभवतः 4 या 5 ऑपकोड का जुर्माना लगाता है, जो चीजों के पैमाने पर तुच्छ है, किसी भी लाभ को आसानी से एक बड़े सरणी पर एक टेनेरी ऑपरेटर (?) का उपयोग करके मिटा दिया जाएगा (देखें ब्लॉगपोस्ट) मैं जिस ब्लॉग से जुड़ा था, उसके ब्लॉग के माध्यम से ब्राउज़ करने लायक है)। TLDR एक अंतर है, लेकिन यह इतना छोटा है कि यह अर्थहीन है
टॉम जे नोवेल

इसे बाहर निकालने के लिए धन्यवाद मित्र, मैंने कभी इस तथ्य पर विचार नहीं किया कि कई लोग एक ही कोड पर काम करते हैं और यह एक बड़ी समस्या बन जाती है अगर कोई व्यक्ति क्रियाओं के बजाय फ़िल्टर के लिए do_action () लिखता रहता है। इसलिए मैं उन मामलों में add_filters का उपयोग करूँगा जब मुझे यकीन होगा कि मैं इसके इस्तेमाल होने तक कोड के माध्यम से केवल एक ही हूं, अन्यथा मैं add_action () :) लिखूंगा
गगन

सप्ताहांत में पोस्ट में आपके द्वारा बताई गई विधि का परीक्षण करेंगे, और परिणाम पोस्ट करेंगे।
गगन

1
मैं आपको सलाह देता हूं कि हर समय apply_filters का उपयोग करके एक कन्वेंशन के साथ रहना चाहिए, एक माइक्रो-ऑप्टिमाइज़ेशन होगा। आप एक प्रदर्शन दंड प्राप्त करते हैं, लेकिन PHP opcodes से नहीं, यह एक मानसिक प्रदर्शन दंड है, जो बदतर है। यह भी भ्रामक है यदि आप एक कस्टम एक्शन / फ़िल्टर बनाते हैं और बाद में फिर से आना चाहते हैं, तो क्या यह एक एक्शन या फ़िल्टर है? आप जानने का कोई तरीका है
टॉम जम्मू नॉवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.