2010-01-19 18 views
5

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

यदि कोई प्रारंभिक कोडिंग के दौरान कार्यक्षमता पर पूरी तरह से ध्यान केंद्रित करता है, तो बाद में अनुकूलन की देखभाल करना कितना आसान या मुश्किल है?

+0

इसी तरह का प्रश्न (वास्तव में एक डुप्लिकेट नहीं): http://stackoverflow.com/questions/895574/what-are-some-good-code-optimization-methods – TRiG

उत्तर

16

अपने डिज़ाइन और आर्किटेक्चर को अनुकूलित करें - अपने आप को ऐसे डिज़ाइन में लॉक न करें जो कभी भी स्केल नहीं करेगा - लेकिन आपके कार्यान्वयन को माइक्रो-ऑप्टिमाइज़ नहीं करें। विशेष रूप से, माइक्रो-अनुकूलित कार्यान्वयन के लिए सादगी और पठनीयता का त्याग न करें ... कम से कम अपने कोड (आदर्श रूप से पूरी प्रणाली) को बेंचमार्क किए बिना।

निष्पादन की बात आने पर मापन वास्तव में महत्वपूर्ण बिंदु है। Bottlenecks लगभग कभी नहीं हैं जहां आप उन्हें होने की उम्मीद है। मापने के विभिन्न तरीकों के भार हैं; किसी भी माप के बिना अनुकूलन व्यर्थ आईएमओ है।

+3

+1 नथ उद्धृत न करने के लिए +1। यदि मैं एक बार और उद्धरण देखता हूं तो मैं पागल हो सकता हूं;) –

+1

@ डोमिनिक रॉजर यह एक http://stackoverflow.com/questions/2092562/is-it-a-good-practice-to-do-optimization-during-initial -कोडिंग/20 92576 # 20 9 2576? :) – jensgram

-1

समय से पहले अनुकूलन अनुकूलन कर जल्दी एक अच्छा डिजाइन करने से आप ध्यान भंग का नुकसान है, सब बुराई

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

+1

अनुवांशिक: उपरोक्त का मतलब * कमजोर, अस्वीकार्य धीमी *, डिजाइनों का समर्थन करने के लिए नहीं है – ZJR

2

Donald Knuth ने कहा:

हम छोटी क्षमता के बारे में भूल जाना चाहिए, का कहना है कि समय की 97%: समय से पहले अनुकूलन सब बुराई

0

की जड़ नुथ से उद्धरण के लिए http://en.wikipedia.org/wiki/Program_optimization देखें है।

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

गलत और तेज़ से, यह सही और धीमी गति से काम करना हमेशा बेहतर होता है।

1

यह निर्भर करता है कि आप "अनुकूलन" के रूप में क्या देखते हैं। सूक्ष्म-अनुकूलन प्रारंभिक चरणों में नहीं किया जाना चाहिए, और उसके बाद केवल तभी यदि आपके पास ऐसा करने का वैध कारण है (उदा। प्रोफाइलर परिणाम या समान)।

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

0

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

0

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

उदाहरण के लिए।

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

0

क्या प्रारंभिक कोडिंग के दौरान ऑप्टिमाइज़ेशन तकनीकों का पालन करना एक अच्छा अभ्यास है या किसी को पहले कार्यक्षमता के अहसास पर ध्यान केंद्रित करना चाहिए?

यदि आपको पता है कि प्रदर्शन महत्वपूर्ण है (या महत्वपूर्ण), इसे अपने डिजाइन में मानें और इसे पहली बार सही तरीके से लिखें। यदि आप इसे अपने डिजाइन में भी नहीं मानते हैं और यह महत्वपूर्ण है, तो आप समय बर्बाद कर रहे हैं या "अवधारणा का सबूत विकसित कर रहे हैं"।

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

यदि कोई प्रारंभिक कोडिंग के दौरान कार्यक्षमता पर पूरी तरह से ध्यान केंद्रित करता है, तो बाद में अनुकूलन की देखभाल करना कितना आसान या मुश्किल है?

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

बेशक, यह भी मानता है कि आप एक लंबे समय तक कार्यक्रम का पक्ष लेते हैं!

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