किस बिंदु पर आपको प्रदर्शन के बारे में सोचना चाहिए?


16

जैसा कि मैं अनुप्रयोगों का निर्माण कर रहा हूं मैं खुद को लगातार पूछ रहा हूं कि क्या यह एक निश्चित कार्यक्षमता को निष्पादित करने या कार्यान्वित करने का सबसे अच्छा तरीका है। अक्सर, मैं प्रदर्शन के बारे में घोड़ा के सामने "कार्ट लगाने के लिए नहीं" के बारे में टिप्पणी प्राप्त करने के लिए केवल स्टैकओवरफ़्लो या किसी अन्य फ़ोरम के इच्छुक प्रतिक्रिया पर प्रश्न पोस्ट करूंगा। क्या अधिकांश प्रोग्रामर वास्तव में प्रदर्शन के बारे में नहीं सोचते हैं जब तक कि आवेदन समाप्त नहीं हो जाता है, या प्रदर्शन बिल्कुल अस्वीकार्य है ?? मेरा मतलब है, मैं समझता हूं कि विकास के वातावरण उत्पादन वातावरण से भिन्न होते हैं और यह कि आपको अपने देव लैपटॉप से ​​परिणामों पर पूरी तरह से निर्भर नहीं होना चाहिए ... लेकिन, ऐसे अभ्यास और तकनीक हैं जो दूसरों की तुलना में बेहतर प्रदर्शन करते हैं।

क्या विकास प्रक्रिया के दौरान प्रदर्शन पर विचार करना बुरा है? जब तक प्रदर्शन वास्तव में टंकी हो रहा है, तब तक क्या मुझे इन बातों पर ध्यान देना चाहिए?

अपडेट करें

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


मेरी कोशिश है कि मैं हर समय बहुत बकवास लिखूं। मुझे कभी भी परवाह नहीं है अगर स्टार्टअप कोड में यह पूरी तरह से स्पष्ट रेखा एक मुट्ठी भर सीपीयू चक्र लेती है, जो कि एक भारी-भरकम "अनुकूलित" संस्करण से अधिक है। आप किस तरह के "प्रदर्शन के बारे में सोच रहे हैं"?

Daaaahling, यह स्पष्ट नहीं है? जब आप अपने ऑडिशन के लिए इंतजार कर रहे हैं!
मैट एलेन

जवाबों:


24

प्रदर्शन के विचारों का आवर्तन कभी-कभी वाक्यांश के गलत अर्थ पर आधारित होता है:

सभी बुराईयो की जड़ समयपूर्व इष्टतमीकरण है।

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

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

ऐसे कई काम हैं जिन्हें आप विकास के दौरान अच्छे प्रदर्शन के लिए कर सकते हैं, बिना गूढ़ (और समयपूर्व) अनुकूलन के।

  1. एक समझदार, सुविचारित वास्तुकला का उपयोग करें।
  2. डेटा संरचनाओं का ठीक से उपयोग करें।
  3. प्रौद्योगिकियों (पुस्तकालयों, चौखटे) का उपयोग करें जो पर्याप्त रूप से प्रदर्शन करते हैं।

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


5
+1 महान साधु से एक अच्छी तरह से मतलब है लेकिन अधिक इस्तेमाल वाक्यांश के लिए इस तरह से है कि कार्रवाई करने योग्य है। मैं अब तक बहुत से प्रोग्रामर जानता हूं, जो शायद उस वाक्यांश को अपने कार्यस्थानों पर एक नमूना में सिले हुए हैं, क्योंकि वे हर दिन इसे एक तर्क के रूप में उपयोग करते हैं, ताकि किसी समस्या के महान समाधान को सोचने से पहले किसी समस्या को हल करने के लिए उपयोग न करें। ।
एडम क्रॉसलैंड

@ अदम - धन्यवाद! मैं पूरी तरह से सहमत! मुझे व्यक्तिगत रूप से समझ में नहीं आता है कि आप कोड का एक गुच्छा लिखने से पहले प्रयास को चीजों में क्यों नहीं डालना चाहते हैं।
कॉग्निट्रोनिक

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

20

यहाँ है क्या नहीं के बारे में सोचने के लिए:

  • है ++iकी तुलना में तेजी i++?
  • है switchकी तुलना में तेजी if?
  • क्या मुझे inlineअपने कार्य करने चाहिए ?
  • क्या आभासी कार्य धीमी गति से होते हैं?
  • क्या C ++ / Java / C # दूसरे की तुलना में अधिक तेज / धीमा है?
  • ब्ला, ब्ला ...

यहाँ के बारे में क्या सोचना है:

  • यथार्थवादी अपेक्षित कार्यभार क्या है?
  • इनपुट जानकारी कितनी बार बदलती है, और इसे कौन प्रदान करता है? यह precompiling पर विचार करने के लिए समझ में आता है?
  • क्या मैंने अपनी डेटा संरचना को सरल और यथासंभव सामान्य रखा है? इसका मतलब हैशिंग और उस तरह के सामान के बारे में चिंता करना नहीं है।
  • क्या मैंने सूचनाओं को पूर्ण न्यूनतम रखा है ? (यही कि डेटा के एक हिस्से में बदलाव के लिए दूसरे हिस्से में समान समय के बदलाव की आवश्यकता होती है, क्योंकि डेटा संरचना सामान्य नहीं होती है)

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

यदि आपने यह सब किया है, तो आपके पास एक साफ डिजाइन है। फिर समय-समय पर जैसे ही आप इसे विकसित करते हैं, प्रोफ़ाइल। ( रैंडम-पॉज़िंग वह विधि है जिस पर मैं भरोसा करता हूं।) फिर यदि आप देख सकते हैं कि प्रदर्शन को और अधिक परिष्कृत एल्गोरिदम में लाकर, सभी तरीकों से ऐसा किया जाएगा।


2
अच्छा उत्तर; बहुत बुरा सवाल सीडब्ल्यू इतनी जल्दी चला गया, या आप कुछ प्रतिनिधि प्राप्त कर सकते थे। संपादित इतिहास में एक ऑडिट ट्रेल हुआ करता था ताकि यह दिखाया जा सके कि यह कब और क्यों हुआ; अब ऐसा लगता है कि एसई नेटवर्क इसे सरसरी तौर पर कर रहा है।
रॉबर्ट हार्वे

@ रॉबर्ट: हाँ। उदास। मुझे बस अपने वर्चुअल बियर में रोना
पड़ेगा

3

नहीं, आपको शुरू से ही प्रदर्शन (विशेषकर डिजाइनिंग डेटाबेस में) के बारे में नहीं सोचना चाहिए। हमारे उद्योग को ऐसे लोगों से बहुत नुकसान हुआ है जो सोचते हैं कि कोई भी अनुकूलन समयपूर्व अनुकूलन है। किसी समस्या के होने से पहले लोगों को सूक्ष्म-अनुकूलन को देखने से रोकने के लिए उद्धरण का उद्देश्य था। यह बिल्कुल भी अनुकूलन नहीं करने का इरादा नहीं था। उदाहरण के लिए एक डेटाबेस में, कई ज्ञात टेकनीक हैं जो खराब प्रदर्शन करते हैं। उन लोगों से बचना, डिजाइन में, आपको क्या करना है, इसका हिस्सा है। 100,000,000 रिकॉर्ड के साथ एक डेटाबेस को फिर से बनाना बहुत मुश्किल है क्योंकि यह खराब छिद्रित तकनीकों का उपयोग करके बनाया गया था और हम अब बेहतर हार्डवेयर खरीदकर इस मुद्दे से बच नहीं सकते हैं।


3

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

80% प्रदर्शन हाथ में समस्या के लिए सही एल्गोरिदम और डेटा संरचना उठा रहा है; एक खराब अनुकूलित क्विकॉर्ट अभी भी औसत मामले में एक अत्यधिक अनुकूलित बुलबुला प्रकार से पैंट को हरा रहा है (सबसे खराब स्थिति यह एक ड्रॉ है)।

एसओ पर हर कोई स्मैक डाउन करने की कोशिश कर रहा है, "जो तेज है, ++ p या p ++" मानसिकता है, जहां लोग कंपाइलर को बाहर निकालने में इतने फंस जाते हैं कि वे बड़ी समस्या का ट्रैक खो देते हैं, जिसके परिणामस्वरूप कोड भंगुर होता है, बग -दोस्तों, गलत , और सब से अच्छा, यह नहीं कि एक अधिक सीधे समाधान की तुलना में बहुत तेज होता। मैंने उस तरह का कोड पहले हाथ से निपटाया है; एक उदाहरण इतना भंगुर था कि हम इसे पूरी तरह से तोड़े बिना कोई बदलाव नहीं कर सकते थे ।


1 जहां "शुद्धता" का अर्थ है "विनिर्देश को पूरा करना", जो "बग-मुक्त" का पर्याय नहीं है।


1
कुछ विनिर्देश प्रदर्शन की आवश्यकता को परिभाषित करते हैं, आपके आदेश पर इसका क्या प्रभाव पड़ेगा?
बेन एल

@ बेन: आदर्श रूप से, कोई नहीं। हालांकि, यदि आप उपरोक्त आदेश को पूरा करते हैं और अभी भी एक कठिन प्रदर्शन की आवश्यकता को पूरा करने में असफल हो रहे हैं, तो पहला कदम आपकी अड़चन (दुआ) को खोजने के लिए है। उसके बाद, यह एक निर्णय कॉल है; क्या आप स्थिरता, सुरक्षा, या विश्वसनीयता का त्याग करते हैं? मैं एक आकार-फिट-सभी समाधान के बारे में नहीं सोच सकता। मैं सुरक्षा और विश्वसनीयता के बारे में अधिक पागल हूं, इसलिए मैं संभवत: पहले पठनीयता का व्यापार करूंगा, लेकिन यह हो सकता है कि रनटाइम वातावरण स्वयं सुरक्षित हो और अन्य दो का व्यापार करने के लिए पर्याप्त स्थिर हो।
जॉन बोडे

2

एक बार जब आप जानते हैं कि "अच्छा" प्रदर्शन क्या है, तो आपको प्रदर्शन के बारे में सोचना चाहिए। दूसरे शब्दों में, निम्नलिखित थ्रेसहोल्ड क्या हैं, इसकी पहचान करने से पहले प्रदर्शन के बारे में सोचना शुरू करना गलत होगा:

  • अस्वीकार्य प्रदर्शन - हाथ से आगे निकलने से पहले इसे अब ठीक कर लें
  • स्वीकार्य प्रदर्शन - प्रदर्शन के साथ किसी भी अधिक करने का प्रयास करने से पहले अन्य विशेषताओं पर ध्यान केंद्रित करने का समय है।
  • लक्ष्य प्रदर्शन - आदर्श प्रदर्शन संख्या। यानी यदि आपके पास पर्याप्त समय और संसाधन हैं तो आपको अपने सिस्टम की क्या आवश्यकता होगी?

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

उन मैट्रिक्स के साथ आने के लिए, आपको यह समझने की आवश्यकता है कि आपके सिस्टम को क्या करने की आवश्यकता है। उदाहरण के लिए, निरपेक्ष प्रदर्शन मेट्रिक्स (एक्स समय के भीतर प्रतिक्रिया) के लिए कहा जाता है या थ्रूपुट माप के लिए बुलाया जाता है (वाई प्रति समय एक्स प्रतिक्रियाएं)? थ्रूपुट और निरपेक्ष समय के अनुकूलन के लिए अलग-अलग तरीकों की आवश्यकता होती है, और यदि आप नहीं जानते कि वास्तव में क्या महत्वपूर्ण है, तो आप गलत तरीके से अनुकूलन कर सकते हैं।


1

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

यह कहा जा रहा है, प्रारंभिक कोडिंग चरण के दौरान प्रदर्शन के बारे में सोचने में कुछ भी गलत नहीं है यदि आप कुछ तकनीकों को जानते हैं जो एक वास्तविक अंतर बनाएंगे। उदाहरण के लिए, एक पुस्तकालय से दूसरे में भंडारण संरचना चुनना क्योंकि पिछले अनुभव ने आपको सिखाया है कि उनमें से एक तेज है / दूसरे की तुलना में कम रैम का उपयोग करता है। या एक साधारण में निर्माण (आप इसे और अधिक परिष्कृत बना सकते हैं यदि बाद में परीक्षण की आवश्यकता होती है) डेटा के लिए कैशिंग प्रणाली जिसे आप जानते हैंएक बहुत पहुँचा जा सकता है और बहुत बेहतर कैश होगा। इस तरह, आप प्रदर्शन के बारे में बहुत कम नहीं कर रहे हैं (कम से कम शुरू में नहीं) लेकिन आप उन युक्तियों और चाल का उपयोग कर रहे हैं जो आपने अन्य परियोजनाओं के साथ सीखी हैं। इन सरल रखने की कोशिश करें ताकि प्रारंभिक विकास के दौरान उन्हें शामिल करना आसान हो, और कुछ लाभ भी प्रदान कर सकें।


1

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

आवश्यकताएँ दस्तावेज़ीकरण आपको सैकड़ों घंटे का समय बचाएगा, जो अन्यथा गैर-आवश्यक प्रक्रियाओं पर बर्बाद हो जाएगा।


1

एक संतुलित दृष्टिकोण बेहतर होगा। प्रदर्शन महत्वपूर्ण है, लेकिन उतना महत्वपूर्ण नहीं है जितना कि चीजों को पूरा करना, इसलिए:

  1. पहले एक फीचर बनाने की कोशिश करें कि आप क्या कर रहे हैं और कैसे कर रहे हैं, इसके बारे में थोड़ा सोचने की कोशिश करें (प्रदर्शन के बारे में थोड़ा समय सोचें लेकिन ज्यादा नहीं)
  2. झसे आज़माओ
  3. यदि एक बार यह सोचना शुरू कर दिया जाए कि क्या इसे बेहतर बनाने की वास्तविक आवश्यकता है (आमतौर पर आप अभ्यस्त नहीं होंगे, लेकिन कुछ मामलों में आप ऐसा कर सकते हैं)।

यह प्रदर्शन बनाम कार्यक्षमता के लिए मेरा सामान्य दृष्टिकोण है, और सामान्य मामलों में यह सब इस बात पर निर्भर करता है कि कार्यक्रम क्या करता है और सत्यापित करता है कि क्या चीजों को बेहतर बनाने के लिए कोई आवश्यकता है और मुझे कितना समय लगेगा।

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


1

प्रदर्शन के बारे में सोचने के सुरक्षित तरीके का एक तरीका है: जहां भी संभव हो, डोमेन विशिष्ट भाषाओं का उपयोग करना।

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

यह वीवी के रखरखाव के बिंदु से भी बेहतर तरीका है।


1

आपको प्रदर्शन को ध्यान में रखना चाहिए। हालाँकि, आपको ट्यूनिंग के अंत को चिह्नित करने के लिए एक रेखा खींचनी होगी, क्योंकि (आमतौर पर) आपका समय कंप्यूटर की तुलना में अधिक महत्वपूर्ण होता है।

प्रदर्शन पर एक बहुत अच्छा पाठ लेख है: कंप्यूटर प्रदर्शन शैल खेल

कंप्यूटर प्रदर्शन शेल गेम, जिसे "अड़चन ढूंढना" के रूप में भी जाना जाता है, हमेशा इन चार संसाधनों के बीच खेला जाता है:

  • सी पी यू
  • डिस्क
  • नेटवर्क
  • स्मृति

किसी भी समय, आपका कंप्यूटर इन संसाधनों में से किसी एक पर पूरा होने के लिए कुछ ऑपरेशन की प्रतीक्षा कर रहा है। लेकिन कौन सा: सीपीयू, मेमोरी, डिस्क, या नेटवर्क? यदि आप प्रदर्शन में रुचि रखते हैं, तो आपको जो सबसे पहला काम करना है, वह यह निर्धारित करता है कि वर्तमान में इनमें से कौन सी अड़चन है।


0

"सबसे अच्छा" तरीका एक बहुत ही भरा हुआ शब्द है, और इसका उत्तर उन कारकों पर अत्यधिक निर्भर हो सकता है जिन्हें रनटाइम तक नहीं जाना जाता है।

  • क्या आपके पास भरपूर मेमोरी है? - आपको "ऑल-इन-मेमोरी" डेटा संरचना के साथ बेहतर प्रदर्शन मिलेगा, लेकिन यदि आपके पास पर्याप्त मेमोरी नहीं है तो स्वैप आपके प्रदर्शन को मार देगा।
  • क्या आपको दृढ़ता की आवश्यकता है? एक डेटाबेस अखंडता देता है लेकिन उपरोक्त "ऑल-इन-मेमोरी" डेटा संरचना की तुलना में धीमा है। बहुत धीमी।
  • क्या आप परिणाम प्राप्त कर सकते हैं? वार्निश उस के साथ मदद कर सकता है! http://www.varnish-cache.org/

यह सूची लम्बी होते चली जाती है।

आप जो कर सकते हैं, वह है "सरलतम बात जो संभवतः काम कर सकती है" उस ज्ञान से लिखना है जो आपके पास वर्तमान में है, और इसे एक मॉड्यूलर फैशन में करें ताकि आप अधिक जानने के बाद आसानी से पुनर्गठित कर सकें। ध्यान दें कि "सरलतम" चीज जरूरी सरल नहीं है!


0

यह हमेशा कुछ ऐसा है जिसे आपको ध्यान में रखना चाहिए। मुझे लगता है कि ज्यादातर लोग जो कहना चाह रहे हैं, वह यह है कि दो दिन बिताने का कोई मतलब नहीं है कि आप कुछ ऐसा कर सकते हैं जिसे आप नहीं जानते। एक बार आपके पास एक उत्पाद चल रहा है, और कुछ प्रयोज्य परीक्षण कर सकते हैं, जो आपको यह दिखाना चाहिए कि आपको प्रदर्शन की समस्या कहाँ है। फिर, एक बार जब आप सच्चे प्रदर्शन के मुद्दों की पहचान कर सकते हैं, तो आप उन अनुकूलन को लक्षित कर सकते हैं जिन्हें आपको प्रदर्शन करने की आवश्यकता है।


0

सिद्धांत में कम से कम, आपको बीटा परीक्षण में एक बार प्रदर्शन करने के बारे में सोचना चाहिए और पहले नहीं।

हालांकि, यह खराब डिजाइन निर्णय लेने के लिए लाइसेंस नहीं है। उदाहरण के लिए, एक प्राथमिक कुंजी के रूप में एक NVARCHAR स्ट्रिंग का उपयोग करना खराब प्रदर्शन का एक निश्चित मार्ग है; कहा कि, यह प्रदर्शन की समस्याओं की परवाह किए बिना एक गंदी आदत है और आपको पहली जगह में उपयोग नहीं करना चाहिए।

यदि आपका डिज़ाइन पारंपरिक सर्वोत्तम प्रथाओं का पालन करता है (3 जी सामान्य रूप में सब कुछ, आपकी कक्षाओं में छिपी उचित जानकारी, एकलगानों का कम से कम उपयोग, आदि), और बाद में एक प्रदर्शन मुद्दा है, तो इसे संभालना आसान होगा (यहां एक इंडेक्स बनाएं), वहाँ एक कैश लागू करें)।

HTH


0

निर्भर करता है। यह 80/20 नियम को ध्यान में रखना उपयोगी है: आवेदन में कोड के अधिकांश (चलो कहते हैं कि 80%) कभी भी निष्पादन में किसी भी ध्यान देने योग्य अंतर बनाने के लिए अक्सर पर्याप्त निष्पादित नहीं किया जाएगा। आपको शेष 20% पर ध्यान केंद्रित करने की आवश्यकता है जहां ऐप अपने निष्पादन समय का लगभग 80% खर्च करने के लिए बाध्य है।

आप पहले से ही कुछ स्पष्ट प्रदर्शन वाले हॉट स्पॉट की पहचान करने में सक्षम हो सकते हैं , जैसे कि यदि आप जानते हैं कि एक विशेष गणना लाखों गुना अधिक होने जा रही है। ऐसे मामलों में यह निश्चित रूप से नौकरी के लिए सही डेटा संरचनाओं और एल्गोरिदम का चयन करके इसे सामने लाने के बारे में सोचने लायक है।

हालाँकि, यह अनुकूलन अधिक डिज़ाइन गतिविधि है। आम तौर पर जो बेकार है वह माइक्रो-ऑप्टिमाइजेशन है, जहां कोई व्यक्ति "प्रदर्शन प्राप्त करने" के नाम पर चतुर बिट-फिडलिंग ट्रिक्स के साथ समय की एक विषम राशि खर्च करता है। विशेष रूप से अगर पहले और बाद में उचित माप के बिना किया जाता है, तो इस तरह के बदलावों से कोई फर्क नहीं पड़ सकता है, या वास्तव में वास्तविक जीवन परिस्थितियों में ऐप को धीमा कर सकता है।


0

यह इस बात पर निर्भर करता है कि आप किस अवस्था में हैं

1) यदि आप अपने सॉफ़्टवेयर की कार्यक्षमता का निर्माण करते हैं, तो इसे चालू रखें और सुनिश्चित करें कि यह ठीक काम करता है (यानी, वांछित और कुशलतापूर्वक)।

2) एक बार ब्लॉकों के निर्माण के लिए, आपको संसाधन हॉगर का संकेत मिलेगा, वहां आपके पास अनुकूलन के लिए जगह है।


0

यदि आपको प्रदर्शन के बारे में सोचना शुरू करना है , तो आप मुश्किल में हैं। आपको हर समय प्रदर्शन के बारे में सोचना चाहिए। वास्तव में, मुझे संदेह है कि अच्छे प्रोग्रामर प्रदर्शन के बारे में सोचने जा रहे हैं, जब वे इरादा नहीं करते थे, एक «पुरुषों में हर सात सेकंड में सेक्स के बारे में सोचते हैं» फैशन ..

यह महत्वपूर्ण है कि आप उस सोच के आधार पर क्या कार्य करेंगे। विचार सस्ते हैं, लेकिन कार्रवाई कोड को तोड़ सकती है और समय सीमा को उड़ा सकती है।

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

अक्सर, आपको संदेह है कि किसी दिए गए ऑपरेशन में एक प्रदर्शन समस्या हो सकती है जिसे एक साधारण परिवर्तन द्वारा हल किया जा सकता है। उदाहरण के लिए, हर अनुरोध पर एक जटिल SQL क्वेरी चलाने या एक शब्दकोश से दो बार डेटा के एक ही टुकड़े के लिए पूछने वाले नेगिंग भावना आपके लिए खराब होने वाली है। यह वह जगह है जहाँ अनुकूलन तकनीकों का ज्ञान काम आता है, और शायद सबसे आश्चर्यजनक निष्कर्ष होता है:

यदि आप एक त्वरित तकनीक के बारे में जानते हैं जो निश्चित रूप से कोड के एक टुकड़े के प्रदर्शन में सुधार करेगा, तो ऐसा न करें।

यदि आप इसे अभी सोच सकते हैं, तो आप निश्चित रूप से इसे पांच मिनट बाद कर सकते हैं। इसे कोड से बाहर रखना (लेकिन, शायद, एक // TODOटिप्पणी में) कोड क्लीनर को छोड़ देता है और आपको पिछली बार किसी अन्य सुविधा पर काम करने के लिए बचाता है, जबकि यदि आप उस कोड को बाद में दूर फेंक रहे हैं तो कोई समय बर्बाद नहीं करते। यदि मूल कोड का परीक्षण होने पर प्रदर्शन समस्याओं का कारण बनता है, तो वापस जाएं और अपनी त्वरित तकनीक लागू करें।

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

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


0

IMHO सिस्टम को लागू करने से पहले प्रदर्शन के बारे में सोचना महत्वपूर्ण है, लेकिन केवल इसके बारे में सोचें। आपको आवेदन का विश्लेषण करना चाहिए और पता लगाना चाहिए कि संभावित प्रदर्शन में अड़चनें क्या हो सकती हैं।

फिर सिस्टम को यथासंभव सरल लागू करें। यदि प्रदर्शन समस्याएं उत्पन्न होती हैं, तो अनुकूलन करें।

उदाहरण के लिए, मान लें कि आपके पास एक GUI क्लाइंट है जो किसी प्रकार की सेवा (SOAP, REST HTTP, आदि) के माध्यम से डेटा प्राप्त करता है। फिर उच्च प्रदर्शन / स्केलेबिलिटी के लिए सबसे महत्वपूर्ण बात यह है कि जितनी संभव हो उतने कॉल हों, प्रत्येक कॉल में बहुत अधिक डेटा वापस आए, बल्कि यह कि बहुत से कॉल प्रत्येक जानकारी को थोड़ा-थोड़ा करके लौटाते हैं, यानी चैटिंग के लिए चंकी संचार पसंद करते हैं।

इस तरह की प्रणाली को लागू करते समय, मैं सिस्टम के बीच कॉल की संख्या के बारे में ज्यादा परवाह नहीं करता। लेकिन मैं यह सुनिश्चित करूँगा कि जब आवश्यकता पड़ी तो कोड बेस मेरे लिए रिफ्लेक्टर / ऑप्टिमाइज़ करना आसान बना देगा।


0

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

आप कुशल आदतों को प्राप्त करना चाहते हैं, लेकिन ये भाषा पर निर्भर करेंगे। C ++ में, उदाहरण के लिए, "++ i;" एक स्टैंड-अलोन स्टेटमेंट या एक्सप्रेशन के रूप में हमेशा कम से कम "आई ++" के रूप में अच्छा होता है, और संभवतः बहुत अधिक कुशल हो सकता है। ज्यादातर मामलों में, हालांकि, आपको स्पष्ट कोड लिखना चाहिए और संकलक पर भरोसा करना चाहिए। सूक्ष्म-दक्षता के बारे में चिंता करने की आदत में शामिल होना निश्चित रूप से आपको हल करने की तुलना में अधिक समस्याएं पैदा करेगा। डेस्कटॉप ऐप्स के लिए, या तो कंपाइलर कम से कम उतना स्मार्ट है जितना आप i >> 1बनाम चीजों के बारे में हैं i / 2, या प्रदर्शन को बेहतर बनाने का सबसे अच्छा तरीका एक बेहतर कंपाइलर है, इसलिए इसके बारे में चिंता न करें।

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


0

मुझे लगता है कि आप जो सबसे अच्छा कर सकते हैं वह है अच्छी डिजाइन प्रथाओं का पालन करना (उदाहरण के लिए, जो चीजें आप जानते हैं कि वे प्रदर्शन में बाधा नहीं डालेंगे) जब तक आप कुछ काम नहीं करते। यदि आप सुधार नहीं कर सकते, तो आप सुधार नहीं कर सकते। एक बार जब आपके पास कुछ ऐसा होता है, जिसके साथ आप परीक्षण कर सकते हैं, तो यह अक्सर एक अच्छा विचार होता है कि एक प्रोफाइल चलाएं और एक विचार प्राप्त करें कि हॉट स्पॉट (यदि कोई हो) हैं। अगर कुछ आप पर उछलता है, तो आपको समस्या क्षेत्र को फिर से भरने या फिर से लिखने पर विचार करना चाहिए, लेकिन अगर यह बहुत बुरा नहीं है (सिर्फ इसलिए कि कोड अपना 90% दो या तीन तरीकों में खर्च करता है, तो इसका कोई मतलब नहीं है अगर यह पर्याप्त रूप से समग्र प्रदर्शन करता है) तो बस विकास करते रहो। कुछ मैंने एक से अधिक बार देखा है जो डेवलपर्स हैं जो सिस्टम के सबसे जटिल हिस्से का अनुकूलन करने वाले दिन बिताते हैं,


0

मुझे इसके बारे में कब सोचना शुरू करना चाहिए? मुझे इसमें कितना प्रयास करना चाहिए? यह प्रोजेक्ट के कॉकबर्न स्केल पर निर्भर करता है । (दूसरे शब्दों में, अच्छा प्रदर्शन न करने का जोखिम क्या है?)

पहले से बुनियादी बातों को अच्छी तरह से जानें (रॉबर्ट हार्वे का जवाब देखें )। सॉफ्टवेयर विकास के विभिन्न चरणों के दौरान प्रदर्शन-उन्मुख सोच को लागू करने के लिए, डेवलपर को इसे अंदर-बाहर जानना होगा, ताकि विचार प्रक्रिया उन अतिरिक्त विचारों से बाधित न हो। (दूसरे शब्दों में, परियोजना की कल्पना से पहले प्रदर्शन के बारे में सोचना शुरू करें।)

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

फिर, आपकी परियोजना की प्रकृति और उसके कॉकबर्न स्केल पर निर्भर करता है:

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

    • परियोजना के बाद के आधे हिस्से में, वास्तविक उपयोग के मामलों के आधार पर "हॉटस्पॉट्स" की पहचान करने के लिए तदर्थ प्रदर्शन परीक्षण होगा। यदि कोई प्रदर्शन समस्या है जो सॉफ़्टवेयर को अनुपयोगी बनाती है, तो इसे आसानी से पहचाना जाना चाहिए।
    • कम व्यावसायिक प्रभाव वाले इन-हाउस विकास के लिए, बस कोड को तैनात करें और बाद में प्रदर्शन समस्याओं को ठीक करें।
  • डेस्कटॉप एप्लिकेशन, जिन्हें प्रदर्शन के लिए एक सुसंगत, अच्छी तरह गोल दृष्टिकोण की आवश्यकता होती है। इसे अत्यधिक अनुकूलित करने की आवश्यकता नहीं है; हालाँकि, वहाँ संभव के रूप में कुछ "हैंग" (गैर-जवाबदेही) होना चाहिए।

    • डेस्कटॉप अनुप्रयोगों में आमतौर पर अत्यधिक जटिल निष्पादन पथ होते हैं जो प्रदर्शन-उन्मुख सोच को जटिल करते हैं। एक स्तरित डिजाइन जीयूआई प्रदर्शन मुद्दों से डेटाबेस / नेटवर्क के प्रदर्शन के मुद्दों को अलग करने की अनुमति देगा, जिसे आपकी टीम में विभिन्न विशेषज्ञों द्वारा नियंत्रित किया जाएगा ।
    • लॉग निशान का एक इतिहास हॉटस्पॉट की पहचान करने की अनुमति देगा।
  • उच्च प्रदर्शन कंप्यूटिंग, जिसमें हार्डवेयर से सबसे अधिक प्रदर्शन प्राप्त करने की आवश्यकता होती है।

    • प्रदर्शन आँकड़ों के विश्लेषण और रिपोर्टिंग के लिए अपनी टीम में किसी को नियुक्त करें।
    • प्रदर्शन विशेषताओं के बारे में सिद्धांत बनाएं, प्रयोगों के साथ सत्यापित करें, और सरलीकृत COMP विज्ञान मॉडल से अपनी भविष्यवाणियों की तुलना करें।
    • *

0

शुरू में। आवश्यक प्रदर्शन विशेषताओं को पहचानें। यदि आप लक्ष्य की पहचान नहीं कर सकते हैं, तो आपको अपनी आवश्यकताओं को बेहतर ढंग से समझने के लिए या पीछे हटने की जरूरत है, जब तक कि आप जोखिम के साथ अपने घटक आवश्यकताओं को नहीं जानते हैं आप फिर से लिख सकते हैं। फिर, परीक्षण। अनुकूलन न करें, परीक्षण करें। यदि आप कोड प्रदर्शन परीक्षण में विफल रहते हैं, तो अनुकूलन करें। जगह में एक परीक्षण ढांचे के साथ, मौजूदा प्रदर्शन निगरानी उपकरणों के उपयोग से कार्य को काफी आसान बना दिया जाना चाहिए।

एक प्रतिगमन परीक्षण के रूप में परियोजना के जीवनकाल के लिए प्रदर्शन परीक्षण रखें। रखरखाव कोड प्रदर्शन समस्याओं को ट्रिगर करने के लिए कुख्यात है क्योंकि 'फ़िक्सेस' में अक्सर बहुत संकीर्ण फोकस होता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.