मैं छवि प्रसंस्करण और पुन: प्रसंस्करण जैसे बहुत ही प्रदर्शन-महत्वपूर्ण क्षेत्रों में काम करने का पक्षपाती हो सकता हूं, लेकिन मैं अभी भी "जितना संभव हो उतना देर से अनुकूलन " करने के लिए कहूंगा । कोई फर्क नहीं पड़ता कि आपकी आवश्यकताओं का प्रदर्शन कितना महत्वपूर्ण है, वहाँ हमेशा इतनी अधिक जानकारी और स्पष्टता है कि आपके द्वारा मापे जाने के बाद, अग्रिम में की तुलना में, जिसका अर्थ है कि इस तरह के ज्ञान प्राप्त करने के बाद भी सबसे प्रभावी अनुकूलन आमतौर पर लागू होते हैं।
अजीबोगरीब मामले
लेकिन कभी-कभी "जितनी देर हो सके उतनी देर तक" कुछ अजीब मामलों में अभी भी बहुत जल्दी है। यदि हम ऑफ़लाइन रेंडरर्स की बात कर रहे हैं, उदाहरण के लिए, प्रदर्शन को प्राप्त करने के लिए आपके द्वारा उपयोग की जाने वाली डेटा संरचनाएँ और तकनीकें वास्तव में उपयोगकर्ता-अंत डिज़ाइन में रिसती हैं। यह घृणित लग सकता है लेकिन यह क्षेत्र इतना अत्याधुनिक है और इतना प्रदर्शन-महत्वपूर्ण है कि उपयोगकर्ता किसी विशेष रेमेत्रीसर (पूर्व: विकिरण विकिरण या फोटॉन मैपिंग) पर लागू होने वाली अनुकूलन तकनीकों के लिए विशिष्ट उपयोगकर्ता को स्वीकार करते हैं, क्योंकि उनमें से कुछ का उपयोग किया जाता है। रेंडर करने के लिए एक छवि के लिए घंटों इंतजार करना, और दूसरों को रेंडर करने के लिए समर्पित मशीनों के साथ एक रेंडर फार्म किराए पर या खुद करने के लिए पैसे की भारी मात्रा में उपयोग करने के लिए उपयोग किया जाता है। उन उपयोगकर्ताओं के लिए समय और धन में भारी कमी है यदि एक प्रतियोगी ऑफ़लाइन रेंडरर खर्च किए गए समय में एक गैर-तुच्छ कमी की पेशकश कर सकता है। यह एक प्रकार का क्षेत्र है जहां समय में 5% की कमी वास्तव में उपयोगकर्ताओं को उत्साहित करती है।
ऐसे अजीबोगरीब मामलों में आप सिर्फ एक रेंडरिंग तकनीक विली-नीली नहीं चुन सकते हैं और बाद में इसे ऑप्टिमाइज़ करने की उम्मीद करते हैं, क्योंकि यूज़र-एंड डिज़ाइन सहित संपूर्ण डिज़ाइन, आपके द्वारा उपयोग की जाने वाली डेटा संरचनाओं और एल्गोरिदम के चारों ओर घूमता है। आप जरूरी नहीं कि सिर्फ उसी के साथ जा सकते हैं जो अन्य लोगों के लिए अच्छी तरह से काम कर रहा है, आप, एक व्यक्ति के रूप में, और आपकी विशेष ताकत और कमजोरियों, एक प्रतिस्पर्धी समाधान देने के लिए भारी मात्रा में कारक। अर्नोल्ड के पीछे मुख्य डेवलपर की मानसिकता और संवेदनाएं वीआरए पर काम करने वाले लोगों से अलग हैं जिन्होंने बहुत अलग दृष्टिकोण का उपयोग किया था; वे आवश्यक रूप से स्थानों / तकनीकों को स्वैप नहीं कर सकते हैं और सबसे अच्छा काम कर सकते हैं (भले ही वे दोनों औद्योगिक नेता हों)। आपको तरह-तरह के प्रयोग और प्रोटोटाइप और बेंचमार्क ढूंढने होंगे और आपको पता चल जाएगा कि ' विशेष रूप से अच्छा है कि अगर आप किसी ऐसी चीज़ को खरीदने की आशा रखते हैं जो वास्तव में बिकेगी, तो अत्याधुनिक तकनीकों की अंतहीन सरणी को देखते हुए। तो इस अजीबोगरीब मामले में, प्रदर्शन की चिंताएँ आगे की ओर बढ़ती हैं क्योंकि शायद विकास शुरू होने से पहले सबसे महत्वपूर्ण चिंता है।
फिर भी यह जरूरी नहीं है कि "जितनी देर हो सके" के अनुकूलन का उल्लंघन हो , यह सिर्फ "जितना संभव हो उतना देर से" इन चरम और अजीब मामलों में जल्दी है। यह पता लगाने की जरूरत नहीं है कि कब और क्या इस तरह के शुरुआती प्रदर्शन की चिंता की जरूरत नहीं है, अगर कभी भी, तो शायद डेवलपर के लिए मुख्य चुनौती है। एक डेवलपर के कैरियर में सीखने और रखने के लिए सबसे महत्वपूर्ण चीजों में से एक का अनुकूलन नहीं हो सकता है, क्योंकि आप भोले डेवलपर्स की कोई कमी नहीं पा सकते हैं जो हर चीज को अनुकूलित करना चाहते हैं (और दुर्भाग्य से कुछ दिग्गज भी जो किसी तरह अपना काम करने में कामयाब रहे उनकी प्रति-उत्पादकता के बावजूद)।
जितना हो सके उतनी देरी से
शायद सबसे कठिन हिस्सा यह समझने की कोशिश करना है कि इसका क्या मतलब है। मैं अभी भी सीख रहा हूं और मैं लगभग तीन दशकों से प्रोग्रामिंग कर रहा हूं। लेकिन विशेष रूप से अब मेरे तीसरे दशक में, मैं महसूस करना शुरू कर रहा हूं कि यह उतना मुश्किल नहीं है। यह रॉकेट विज्ञान नहीं है, अगर आप कार्यान्वयन से अधिक डिजाइन पर ध्यान केंद्रित करते हैं। आपके डिजाइन अधिक उपयुक्त अनुकूलन के लिए सांस लेने के कमरे को छोड़ देते हैं बाद में डिजाइन में बदलाव के बिना, बाद में आप अनुकूलन कर सकते हैं। और अधिक से अधिक उत्पादकता मैं ऐसे डिजाइनों की तलाश कर रहा हूं जो मुझे उस सांस लेने वाले कमरे का खर्च उठाते हैं।
डिजाइन जो बाद में अनुकूलन करने के लिए श्वास कक्ष प्रदान करता है
इस तरह के डिजाइन वास्तव में ज्यादातर मामलों में हासिल करने के लिए कठिन नहीं हैं यदि हम कुछ "सामान्य ज्ञान" को लागू कर सकते हैं। एक व्यक्तिगत कहानी के रूप में मैं एक शौक के रूप में दृश्य कला में हूँ (मुझे लगता है कि यह कुछ हद तक कलाकारों को सॉफ्टवेयर बनाने में मदद करता है, जो कुछ हद तक खुद एक है जो उनकी जरूरतों को समझ सकता है और उनकी भाषा बोल सकता है), और मैंने 2000 के दशक के शुरुआती दिनों में ओकाकी एपलेट्स का उपयोग करके कुछ समय बिताया डूडल के लिए एक त्वरित तरीके के रूप में ऑनलाइन और मेरे काम को साझा करने और अन्य कलाकारों के साथ जुड़ने के लिए।
विशेष रूप से मेरी पसंदीदा साइट और एप्लेट में प्रदर्शन खामियों (किसी भी गैर-तुच्छ ब्रश का आकार क्रॉल करने के लिए धीमा होगा) से भरा था, लेकिन एक बहुत अच्छा समुदाय था। प्रदर्शन के मुद्दों के आसपास काम करने के लिए मैंने नन्हा 1 या 2-पिक्सेल ब्रश का इस्तेमाल किया और बस अपने काम को इस तरह अंजाम दिया:
इस बीच मैं प्रदर्शन में सुधार के लिए सॉफ्टवेयर सुझावों के लेखक को देता रहा, और उन्होंने देखा कि मेरे सुझाव स्मृति अनुकूलन और एल्गोरिदम के बारे में बात करते हुए एक विशेष रूप से तकनीकी प्रकृति के थे। इसलिए उन्होंने वास्तव में पूछा कि क्या मैं एक प्रोग्रामर हूं और मैंने हां कहा और उन्होंने मुझे स्रोत कोड पर काम करने के लिए आमंत्रित किया।
इसलिए मैंने स्रोत कोड को देखा, इसे चलाया, इसे प्रोफाइल किया, और मेरे आतंक के लिए उन्होंने एक "अमूर्त पिक्सेल इंटरफ़ेस" की अवधारणा के चारों ओर सॉफ्टवेयर डिज़ाइन किया था, जैसे IPixel
कि गतिशील के साथ सब कुछ के लिए शीर्ष हॉटस्पॉट के पीछे मूल कारण समाप्त हो गया। आवंटन और हर एक छवि के हर एक पिक्सेल के लिए प्रेषण। फिर भी इस बात का अनुकूलन करने का कोई व्यावहारिक तरीका नहीं था कि पूरे सॉफ्टवेयर के डिज़ाइन पर पुनर्विचार किए बिना क्योंकि डिज़ाइन ने उसे एक कोने में फँसा दिया था जहाँ सूक्ष्म-अनुकूलन के सबसे तुच्छ से परे बहुत कुछ नहीं है जब हमारे अमूर्त एकल सार पिक्सेल के दानेदार स्तर पर काम कर रहे हों और सब कुछ इस अमूर्त पिक्सेल पर निर्भर करता है।
मुझे लगता है कि यह "सामान्य ज्ञान" का उल्लंघन है, लेकिन जाहिर है कि यह डेवलपर के लिए ऐसा सामान्य ज्ञान नहीं था। लेकिन यह ऐसे दानेदार स्तर पर अमूर्त चीजों की तरह नहीं है, जहां सबसे बुनियादी उपयोग के मामले भी लाखों लोगों द्वारा तात्कालिक होने जा रहे हैं, जैसे कि पिक्सल, या कण, या एक छोटे से सेना सिमुलेशन में छोटी इकाइयां। एहसान IImage
या (आप सभी छवि / पिक्सेल प्रारूपों आपको लगता है कि bulkier समग्र स्तर पर की जरूरत है संभाल कर सकते हैं) IParticleSystem
के लिए IPixel
या IParticle
, और फिर आप सबसे बुनियादी और त्वरित करने के लिए लिखने और सरल समझने-में-इस तरह के इंटरफेस के पीछे कार्यान्वयन और में डाल सकते हैं पूरे कमरे के डिजाइन पर पुनर्विचार किए बिना, आपको कभी भी सांस लेने की आवश्यकता होगी।
और यही लक्ष्य है जैसा कि मैं इन दिनों इसे देखता हूं। ऊपर दिए गए ऑफ़लाइन रेंडरर्स की तरह अजीबोगरीब मामलों को छोड़कर, पर्याप्त साँस लेने के कमरे को जितना संभव हो उतना देर से अनुकूलित करने के लिए, (माप सहित) के रूप में अधिक जानकारी के साथ, और किसी भी आवश्यक अनुकूलन को यथासंभव देर से लागू करें।
बेशक, मैं जरूरी नहीं कि इनपुट पर द्विघात जटिलता एल्गोरिदम का उपयोग शुरू करने का सुझाव दे रहा हूं जो आसानी से आम उपयोगकर्ता-अंत मामलों में एक गैर-तुच्छ आकार तक पहुंच जाता है। वैसे भी कौन करता है? लेकिन मैं यह भी नहीं सोचता कि अगर कार्यान्वयन बाद में आसान हो जाए तो यह बहुत बड़ी बात है। यदि आप किसी भी डिजाइन पर पुनर्विचार नहीं करना चाहते हैं, तो यह अभी भी गंभीर गलती नहीं है।