इस प्रश्न को here से पहले पूछा गया था, लेकिन किसी भी उत्तर ने वास्तव में पूछे गए वास्तविक प्रश्न का उत्तर देने की कोशिश नहीं की, इसलिए मैं इसे एक अलग तरीके से पूछ रहा हूं। 100,000 कार्यों के साथ 20,000 लाइनों की एक एकल कक्षा लोड कर रहा है, जो कम से कम कार्यों के साथ छोटे वर्गों को कोड तोड़ने और आवश्यकतानुसार इन छोटे वर्गों को लोड करने से किसी भी तरह से अधिक संसाधन गहन है?20K लाइनों का उपयोग करते समय "प्रदर्शन प्रभाव" एकल वर्ग
उत्तर
एक स्क्रिप्ट या कक्षा जितनी बड़ी होगी, प्रति उदाहरण यह अधिक स्मृति का उपयोग करेगी। बॉक्स के बाहर, PHP के पास पुस्तकालयों और कक्षाओं की मेमोरी स्पेस साझा करने का कोई तरीका नहीं है, इसलिए वेबसाइट के लिए भारी स्क्रिप्ट बनाना एक अच्छा विचार नहीं है।
विशिष्ट दृष्टिकोण ब्लॉक में कक्षाओं को तोड़ने के लिए होना चाहिए जैसे कि आपको केवल उस स्क्रिप्ट को चलाने की आवश्यकता है, जिसे आपको वास्तव में उस स्क्रिप्ट को चलाने की आवश्यकता है।
इसके अलावा, आपके पास प्रदर्शन समस्याओं का कारण होने की संभावना नहीं है जब तक कि आपके पास बड़ी मात्रा में यातायात न हो - और फिर आप कक्षाओं को पुन: सक्रिय करने से आपकी समस्याओं को आसानी से ठीक कर सकते हैं।
जब कोई स्क्रिप्ट लोड हो जाती है, तो उसे पार्स करने के लिए निश्चित मात्रा में स्मृति की आवश्यकता होती है। जितना बड़ा होगा उतना अधिक स्मृति की आवश्यकता होगी। इसके बाद, स्क्रिप्ट स्वयं निष्पादित की जाती है, किसी भी शीर्ष-स्तरीय कोड को चलाती है ( कक्षा या वैश्विक फ़ंक्शन में नहीं)। यदि इसमें किसी भी आवश्यकता/शामिल बयानों को शामिल किया गया है, तो उन स्क्रिप्ट को लोड किया जाता है (यदि आवश्यक हो)। यदि यह ऑब्जेक्ट बनाता है, तो इसमें अधिक मेमोरी होती है।
हालांकि, कक्षा के प्रत्येक उदाहरण का आकार केवल उस डेटा द्वारा प्रभावित होता है जो इसे संग्रहीत करता है। यह सुधार एक तरफ है, यहां सलाह दी गई है: जिम्मेदारियों के आधार पर अपनी कक्षाओं को विभाजित करें। इसका कारण प्रदर्शन की तुलना में विकास की आसानी से भी करना है। मान लें कि आपके पास स्थैतिक तरीकों से भरा एक राक्षस वर्ग है। यदि आपका एप्लिकेशन प्रत्येक अनुरोध के लिए उन तरीकों में से अधिकांश का उपयोग करता है, तो विभाजन के लिए इसका कोई प्रदर्शन लाभ नहीं होगा क्योंकि दोनों स्क्रिप्ट किसी भी तरह लोड होने लगेंगे। लेकिन यदि आप तार्किक उपप्रणाली में विधियों को समूहित कर सकते हैं, तो उन्हें समझना और काम करना आसान होगा।
सहमत हुए। एक तंत्र जो इसे आसान बना सकता है (आपके पुस्तकालय को एकल वर्गों और फ़ाइलों में विभाजित करने के बाद) PHP 5 है [ऑटोलोडिंग] (http://www.php.net/manual/en/language.oop5.autoload.php)। –
@ पेक्का, कृपया एक शब्द का उल्लेख न करें। मैं आधिकारिक तौर पर इसे नफरत करता हूं, क्योंकि मुझे समझ में नहीं आता कि इसे कैसे जोड़ना है। – jblue
@jblue, क्या आप 'ऑटोलोडिंग' के बारे में बात कर रहे हैं? इसके लिए कुछ अच्छे ट्यूटोरियल हैं, यदि आपको कोई समस्या है। – shamittomar
एक बड़ी कक्षा को बाइनरी कोड (ओप-कोड) में संकलित करने के लिए एकल चक्र की आवश्यकता होती है।
कम स्मृति का उपयोग करके कई छोटे वर्गों को अधिक संकलन की आवश्यकता होती है, और संकलन के लिए स्मृति उपयोग जमा किया जाएगा।
वास्तव में निर्भर करता है कि रन-टाइम में कितनी कक्षाएं/फ़ाइलें शामिल की गई हैं।
तो, इसके लिए समाधान, कई कक्षाओं में तोड़ने और APC
या समकक्ष का उपयोग करें।
पुनश्च: बड़ी फ़ाइल के लिए स्मृति की खपत क्योंकि पीएचपी सेशन-कोड में स्रोत फिर से संकलित करने के लिए (यदि आप अनिच्छुक छोटे में बड़ा वर्ग को तोड़ने के लिए)
- 1. मॉड-रिवाइट का उपयोग करते समय कोई नकारात्मक प्रभाव?
- 2. jvmti का प्रदर्शन प्रभाव?
- 3. एकल वर्ग
- 4. प्रदर्शन पर सिस्टमटैप प्रभाव
- 5. वर्चुअल विधियों का प्रदर्शन प्रभाव
- 6. LINQ का उपयोग करते समय डेटाबेस प्रदर्शन ओवरहेड कितना है?
- 7. प्रगामा पैक (1) का उपयोग करते समय प्रदर्शन समस्याएं हैं?
- 8. अपाचे प्रतिक्रिया समय लॉग निर्देश सक्षम करने का प्रदर्शन प्रभाव
- 9. टेम्पलेट वर्ग का उपयोग करते समय लिंकर त्रुटि?
- 10. विस्तार के तरीके: बहुत अधिक उपयोग करते समय प्रदर्शन समस्या?
- 11. खोज करते समय INDEX पर CONVERT() का क्या प्रभाव है?
- 12. जावा प्रभाव प्रदर्शन में जेनेरिक का उपयोग करता है?
- 13. का उपयोग करते समय @require_POST
- 14. एकल काम करते समय कोड समीक्षा
- 15. सार्वभौमिक चयनकर्ता का प्रदर्शन प्रभाव क्या है?
- 16. रेल date_select वर्ग प्रभाव
- 17. एकल-रेखा प्रदर्शन
- 18. कंपाइलर प्रदर्शन पर हाइपरथ्रेडिंग का प्रभाव?
- 19. -फनो-सख्त-एलियासिंग का प्रदर्शन प्रभाव
- 20. PostgreSQL: अतिरिक्त कॉलम का प्रदर्शन प्रभाव
- 21. gdb का उपयोग लाइनों
- 22. नेस्टेड चयनकर्ता प्रदर्शन प्रभाव और कम
- 23. बड़े परमजन आकार + प्रदर्शन प्रभाव
- 24. सीएसएस प्रोपर्टीज के लिए फ़्लोटिंग पॉइंट मानों का प्रदर्शन प्रभाव
- 25. EventArgs का उपयोग करते हुए जानकारी वर्ग
- 26. का उपयोग करते हुए घोषणा (व्युत्पन्न वर्ग)
- 27. एसटीआई का उपयोग करते समय ActiveRecord ऑब्जेक्ट को किसी अन्य वर्ग में कैसे डाला जाए?
- 28. MySQL प्रदर्शन - एकल मूल्य
- 29. सिस्टम स्कोप का उपयोग करते समय NoClassDefFoundError
- 30. बूस्ट एएसओ एकल थ्रेडेड प्रदर्शन
जाहिर की जरूरत नहीं है, बहुत छोटी है , यह उपयोग के मामले पर निर्भर करता है। यदि आप उन्हें तोड़ते हैं, और केवल 1% का उपयोग करके इसे समाप्त करते हैं और केवल 1% लोड करते हैं, निश्चित रूप से यह 100% लोड करने और फिर 1% का उपयोग करने से कम संसाधन-गहन होगा। – houbysoft
आप यहां दो अलग-अलग चीजें पूछ रहे हैं। "प्रदर्शन प्रभाव" zilch है। जबकि "संसाधन गहन", हां यह स्मृति-वार है। यदि आप अपने कोड को छोटे हिस्सों में तोड़ देते हैं, तो आपके पास कम मेमोरी उपयोग होगा, लेकिन अंत में अधिक I/O। सामान्यीकृत सलाह के बजाय xdebug का प्रयोग करें। – mario
निष्पादन यहां आपकी चिंता नहीं होनी चाहिए ... लाभ जो आप रखरखाव में लाएंगे और कोड को पढ़ने में सक्षम होंगे, वे शायद (संभवतः मामूली) प्रदर्शन प्रभाव से अधिक हो जाएंगे। – Thanatos