2009-10-12 12 views
23

बस पीएचपी आउटपुट बफरिंग पर विशेषज्ञों के दिमाग को चुनना चाहते हैं। ऐसे समय होते हैं जब मैं इसे एक कारण या किसी अन्य कारण से कार्यान्वित करना चाहता था, लेकिन हमेशा मेरे कोड को फिर से व्यवस्थित करने में कामयाब रहा।PHP आउटपुट बफरिंग - एक बुरा विचार की तरह लगता है, है ना?

मैं इसे का उपयोग कर, क्योंकि यह लग रहा है जैसे कि यह संसाधनों की लागत जाएगा से बचें। मेरा मतलब है, अगर वे कोडर को इस तरह की अद्भुत लचीलापन प्रदान कर सकते हैं, तो वे हमेशा आउटपुट बफर क्यों नहीं करते? एकमात्र उत्तर मैं इसके साथ आ सकता हूं: क्योंकि यह बफर नहीं करता है कि यह जबरदस्त संसाधनों को बचाता है, और अच्छे कोडिंग अभ्यास के साथ आपको इसकी आवश्यकता नहीं होनी चाहिए।

क्या मैं यहां से रास्ता निकाल रहा हूं?

उत्तर

19

मेरे अनुभव से, वहाँ प्रदर्शन पर एक महत्वपूर्ण प्रभाव नहीं है। मुझे इस विषय पर लगातार उत्तर नहीं मिल रहे हैं - कुछ लोग दावा करते हैं कि प्रदर्शन के खिलाफ मुश्किल से कोई हिट नहीं है, जबकि कुछ कहते हैं कि एक मामूली लेकिन महत्वपूर्ण प्रभाव है। Php.net पर एक टिप्पणी भी है कि बफरिंग कई आउटपुट फ़ंक्शंस की तुलना में प्रदर्शन को बढ़ाता है, न कि मैंने इसे सत्यापित किया है या कुछ भी।

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

+1

वाह जो मैंने पहले सुना है ... प्रदर्शन में संभावित वृद्धि। आप सही हैं, मुझे इसके साथ खेलना चाहिए, खासकर जब मैं विकास चरण में हूं। – Aaron

+1

एक तर्कसंगत कारण है कि प्रदर्शन को बढ़ाया गया है - php "प्रसंस्करण से तोड़ना" नहीं है, इसलिए प्रसंस्करण बहुत तेज है क्योंकि यह निरंतर है - डेटा हस्तांतरण के लिए ही यही होता है। बेशक ऐसा लगता है कि यह एक समय में अधिक स्मृति का उपयोग करेगा, लेकिन यह इसे कम समय के लिए रखता है। Altough आप शायद कुछ framwork/पुस्तकालय लोड कर रहे हैं जो बहुत अधिक लेता है, इसलिए यह "सामान्य" स्रोत कोड राशि आउटपुट-एड पर विचार करने में एक महत्वपूर्ण अंतर नहीं होना चाहिए ... :-) –

8

मुझे लगता है कि विपरीत। बफरिंग आउटपुट एक बुरा विचार नहीं है जबतक कि आप ऐसी परिस्थिति में नहीं जाते जहां आपको वास्तव में इसकी आवश्यकता होती है। उदाहरण के लिए, एक स्क्रिप्ट जो बड़ी मात्रा में आउटपुट बनाने जा रही है।

ज्यादातर मामलों में, प्रोग्रामर समय का एक समूह जलाने का (सस्ते) स्मृति किसी अज्ञात मात्रा को बचाने के लिए संसाधनों की बर्बादी की तरह लगता है।

+0

एक विचार है ... इसका उपयोग करें, लेकिन आउटपुट बड़े होने पर इसे बंद करने का एक तरीका है। अच्छा बिंदु, आदमी! – Aaron

+1

बहुत सारे आउटपुट के साथ एक स्क्रिप्ट के लिए "इसे बंद करें" का सबसे आसान तरीका (कुछ रिपोर्ट जो सीएसवी डेटा या कुछ का एक गुच्छा भेजती है) केवल ob_end_flush() है; अपनी लिपि के शीर्ष पर ऊपर। आप फ्लश() के साथ अपने लूप के अंदर आउटपुट को आउटपुट (कोशिश करने) कर सकते हैं; – timdev

4

उत्पादन बफरिंग मैं एक घर के लिए जल्दी से एक हल्के वजन templating प्रणाली बनाने के लिए कर रहा था का उपयोग करते हुए मेरा आखिरी पीएचपी परियोजना के लिए MVC बैकएंड पीसा। मुझे यह पसंद है और इसे बहुत उपयोगी लगता है।

और संसाधनों के संबंध में: यह संसाधन गहन नहीं है। यदि आप इसका उपयोग करने के बारे में चिंतित हैं, तो PHP नौकरी के लिए सही उपकरण नहीं है। मुझे PHP पसंद है लेकिन यह सबसे हल्का विकल्प नहीं है। हालांकि किसी भी उचित आधुनिक सर्वर पर, इससे कोई फर्क नहीं पड़ता।

+0

@ दीना, मैं इस धारणा के तहत था कि PHP सुपर लाइटवेट था ... लेकिन शायद ऐसा इसलिए है क्योंकि मुझे कोल्डफ्यूजन में उपयोग किया जाता है। हल्का क्या है? – Aaron

+1

@ एरॉन सी, या एएसएम। PHP ऐसी लचीली भाषा है कि यह आमतौर पर सी, सी ++, जावा, सी # आदि जैसी किसी अन्य डेस्कटॉप भाषा की तुलना में धीमी गति से होती है। हालांकि, अन्य स्क्रिप्टिंग भाषाओं की तुलना में, यह अभी भी बहुत तेज़ हो सकता है। – phihag

4

आप स्थिति है जहाँ सामग्री हेडर से पहले उत्पादन हो रही है में हैं, तो आप बाहर त्रुटि मिलेगी कि सामग्री हेडर से पहले उत्पादन था एक बफर वरना पेज में यह सामान के लिए की आवश्यकता होगी। यह मेरे साथ साझा पुस्तकालयों के साथ हुआ है और लॉन्च करने के लिए उचित समय तय करने के लिए पर्याप्त समय नहीं है। यह // TODO/FIXME के ​​उन चिह्नों में से एक है और फिर वापस जाएं और इसे बाद में उचित बनाएं।

संबंधित मुद्दे