2011-10-14 9 views
21

मेरा वर्तमान वेब एप्लिकेशन लगभग 30 या तो Contants (DEFINE()) का उपयोग करता है। मैं चीजें पढ़ रहा हूं कि चर तेज हैं। बशर्ते वेरिएबल ओवरराइट्स से बचने के लिए एक नामकरण सम्मेलन है, मैं देखता हूं कि एकमात्र अन्य ड्रॉ यह है कि इन चरों को वैश्विक चर के रूप में परिभाषित किया जाना चाहिए कि प्रत्येक कार्य में कैसे कुछ।कौन सा तेज़ है? Constants, चर या परिवर्तनीय Arrays

कौन सा तेज़ है? मैं इन अनुप्रयोगों का उपयोग अपने पूरे आवेदन में पूरी तरह से करता हूं और शायद सूची में और अधिक हमेशा के लिए जोड़ रहा हूं और इन्हें कार्यों और कक्षाओं में और बाहर उपयोग किया जाता है।

+15

"समयपूर्व अनुकूलन सभी बुराइयों की जड़ है"। मुझे बताएं, अगर आप किसी भी अंतर को _measure_ कर सकते हैं;) – KingCrunch

+4

बचाया गया समय इतना पतला है कि यह वास्तव में किसी भी विचार के लायक नहीं है। –

+0

यह अनुकूलन के लायक होगा? क्या आप निरंतर संदर्भित हर बार एक लागत है? और जब आप एक चर का संदर्भ देते हैं तो उससे अधिक है? ये 30 स्थिरांक प्रत्येक पृष्ठ पर संदर्भ 100 हैं। – David

उत्तर

23

define() का उपयोग करके परिभाषित स्थिरांक PHP में काफी धीमे हैं। प्रदर्शन में सुधार के लिए लोगों ने वास्तव में एक्सटेंशन (जैसे hidef) लिखा था।

लेकिन जब तक आपके पास स्थिरांक लोड नहीं होते हैं, तो इससे कोई फर्क नहीं पड़ता है।

पीएचपी 5.3 के रूप में आप भी const NAME = VALUE; का उपयोग कर संकलन समय स्थिरांक उपयोग कर सकते हैं। वे बहुत तेज़ हैं।

+4

भार का आपका निर्धारण क्या होगा? मेरे पास लगभग 30 है जो प्रति पृष्ठ 10012 बार संदर्भित हैं – David

+1

@ डेविड 30 ज्यादा नहीं हैं। सैकड़ों स्थिरांक के साथ समस्याएं उत्पन्न हो सकती हैं। – NikiC

11

अंतर वास्तव में छोटा (माइक्रो ऑप्टिमाइज़ेशन) होगा। आप कक्षाओं में अपने कुछ स्थिरांक को बेहतर ढंग से समाहित करेंगे ताकि आप अपने आवेदन के वैश्विक नामस्थान को प्रदूषित न करने के लिए Classname::CONSTANT तक पहुंच सकें।

-1

मैं यह भी कल्पना नहीं कर सकता कि किसी भी गति अंतर के परिणामस्वरूप होगा। निश्चित रूप से सच यह है कि कई मामलों में स्थिरांक की तुलना में चर का उपयोग करना बहुत आसान है।

हालांकि ऐसा लगता है अपने वास्तविक समस्या आप विन्यास डेटा का एक समूह है और आप कार्यों के लिए चर का भार पारित करने के लिए होने से बचने के लिए, या उन सब को वैश्विक बनाने के लिए करना चाहते हैं कि है।

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

7

एक त्वरित परीक्षण से पता चला कि परिभाषित करने स्थिरांक (define('FOO', 'bar');) के बारे में 16 से 18 बार एक चर ($foo = 'bar';) को परिभाषित करने के लिए, लेकिन परिभाषित का उपयोग कर की तुलना में धीमी है (निरंतर) मान लगभग 4 से 6 गुना तेज है।