"वर्थ इट" को संदर्भ की आवश्यकता है, जैसे लिखने और पढ़ने और बनाए रखने के लिए कितना सरल है बनाम यह उपयोगकर्ता को कुछ अधिक तेज़ी से अधिक उत्तरदायी, इंटरैक्टिव बनाता है , जिससे उन्हें प्रतीक्षा करने के लिए कम समय की आवश्यकता होती है।
सोडा की कैन खरीदने के लिए कुछ पैसे बचाना मुझे बहुत अच्छा नहीं लगेगा अगर मुझे उन पेनी को बचाने के लिए एक दूरी तय करनी पड़े, खासकर यह देखते हुए कि मैं शायद ही कभी इन दिनों सोडा पीता हूं। एक लाख की खरीद पर कुछ पैसे बचाने के लिए सोडा की एक बड़ी राशि हो सकती है।
इस बीच कुछ पैसे बचाने के लिए जब दो लोग मेरे ठीक बगल में होते हैं और एक कुछ पेनी के लिए एक ही सटीक चीज प्रदान करता है और दूसरा सस्ता नहीं होता है, और मैं अधिक महंगा एक चुनता हूं क्योंकि मुझे उनकी टोपी बेहतर लगती है जैसे कि एक मूर्खतापूर्ण मामला निराशा का।
मैं अक्सर "माइक्रो-ऑप्टिमाइज़ेशन" कहलाने वाले लोगों को ढूंढता हूं, जो माप और संदर्भ और उपयोगकर्ता-अंत चर्चा से उत्सुकता से रहित प्रतीत होते हैं, जब ऐसे सभी अनुकूलन पर विचार करने के लिए बिल्कुल तीनों होने चाहिए, अगर वे लागू करने के लिए तुच्छ नहीं हैं। मेरे लिए एक उचित माइक्रो-ऑप्टिमाइज़ेशन इन दिनों मेमोरी लेआउट और एक्सेस पैटर्न जैसी चीजों से संबंधित है, और जब वे ध्यान में "सूक्ष्म" लग सकते हैं, तो वे प्रभाव में सूक्ष्म नहीं हैं।
मैं इतनी देर से कामयाब नहीं हुआ, 24 सेकंड से 25 मिलीसेकंड (लगभग 960 गुना तेज) से एक ऑपरेशन को कम कर देता हूं, समान आउटपुट (स्वचालित परीक्षणों द्वारा सुरक्षित) के साथ, एल्गोरिथम जटिलता में कोई बदलाव नहीं होने के साथ, वॉल्यूमेट्रिक हीट डिफ्यूजन स्किनिंग के माध्यम से। "माइक्रो-ऑप्टिमाइज़ेशन" (जिनमें से सबसे बड़ा मेमोरी लेआउट में बदलाव से आया जो इसे लगभग 2 सेकंड तक कम हो गया, फिर बाकी सिमड जैसी चीजें थीं और वीटीएन में कैश मिस का आगे विश्लेषण और मेमोरी लेआउट के कुछ और पुनर्व्यवस्था)।
वोल्फेयर यहां तकनीक की व्याख्या करता है, और वह आवश्यक समय के साथ संघर्ष करता है:
http://blog.wolfire.com/2009/11/volumetric-heat-diffusion-skinning/
मेरा कार्यान्वयन मिलिसेकंड में ऐसा करने में सक्षम था, जबकि वह इसे एक मिनट से भी कम समय में प्राप्त करने के लिए संघर्ष कर रहा था:
मैं "माइक्रो-ऑप्टिमाइज़्ड" होने के बाद इसे 24 सेकंड से 25ms तक कम करता था, जो वर्कफ़्लो में एक गेम-चेंजर था। अब कलाकार हर बार 24 सेकंड प्रतीक्षा किए बिना 30 से अधिक एफपीएस पर रियल टाइम में अपने रिग्स को बदल सकते हैं, उन्होंने अपनी रिग में कोई भी छोटा बदलाव नहीं किया। और यह वास्तव में मेरे सॉफ्टवेयर के पूरे डिजाइन को बदल दिया है क्योंकि मुझे अब प्रगति पट्टी और इस तरह की चीजों की आवश्यकता नहीं है, यह सिर्फ इंटरैक्टिव हो गया है। तो यह इस मायने में "सूक्ष्म अनुकूलन" हो सकता है कि सभी सुधार एल्गोरिदम की जटिलता में सुधार के बिना आए, लेकिन यह "मेगा-ऑप्टिमाइज़ेशन" प्रभाव में था जो कि पूर्व में एक दर्दनाक, गैर-इंटरैक्टिव प्रक्रिया थी। एक वास्तविक समय में, इंटरैक्टिव एक जिसने उपयोगकर्ताओं के काम करने के तरीके को पूरी तरह से बदल दिया।
माप, उपयोगकर्ता-अंत आवश्यकताएँ, संदर्भ
मुझे यहां रॉबर्ट की टिप्पणी बहुत पसंद आई और शायद मैं वह बिंदु बनाने में असफल रहा जो मैं चाहता था:
खैर, चलो। कोई भी यह तर्क देने वाला नहीं है कि इस तरह का परिवर्तन "इसके लायक" नहीं है। आप एक मूर्त लाभ प्रदर्शित करने में सक्षम थे; कई तथाकथित सूक्ष्म अनुकूलन नहीं कर सकते।
यह, अक्सर वास्तविक समय की आवश्यकताओं के साथ एक बहुत ही प्रदर्शन-महत्वपूर्ण क्षेत्र में काम करने के बावजूद, केवल समय मैं किसी भी सूक्ष्म-अनुकूलन पर विचार करता हूं जिसे मेरे रास्ते से बाहर जाने की आवश्यकता होती है।
और मैं न केवल माप पर जोर देता हूं, बल्कि इसके उपयोगकर्ता-छोर की ओर भी। मैं एक ऑडबॉल में हूं कि मैं अपने वर्तमान क्षेत्र (और पूर्व में gamedev) के रूप में एक उपयोगकर्ता / प्रशंसक पहले, डेवलपर दूसरे के रूप में आया। इसलिए मैं कभी सामान्य चीजों से उत्साहित नहीं था जो तकनीकी पहेली को हल करने जैसे प्रोग्रामर को उत्साहित करता था; मैंने उन्हें एक बोझ के रूप में पाया, लेकिन उपयोगकर्ता द्वारा देखे गए अन्य उपयोगकर्ताओं के साथ साझा किए गए सपने के माध्यम से उन्हें सहन करूंगा। लेकिन इससे मुझे यह सुनिश्चित करने में मदद मिली कि अगर मैं कुछ भी अनुकूलन कर रहा था, तो इसका वास्तविक लाभ वाले उपयोगकर्ताओं पर वास्तविक प्रभाव पड़ेगा। यह लक्ष्य-रहित माइक्रो-ऑप्टिमाइज़िंग से मेरा बचाव है।
यह मेरी राय में प्रोफाइलर के रूप में वास्तव में उतना ही महत्वपूर्ण है, क्योंकि मेरे पास एक सहकर्मी थे जिन्होंने एक घन के सूक्ष्म-अनुकूलन उपखंड को अरबों पहलुओं में बदल दिया था, केवल पात्रों और वाहनों जैसे वास्तविक-विश्व उत्पादन मॉडल पर मज़ाक करने के लिए। उनका परिणाम कुछ "टेक डेमो" अर्थों में प्रभावशाली था, लेकिन वास्तविक उपयोगकर्ताओं के लिए लगभग बेकार है, क्योंकि वे प्रोफाइलिंग और माप और बेंचमार्किंग मामले थे जो वास्तविक दुनिया के उपयोग के मामलों के साथ संरेखित नहीं थे। इसलिए यह समझना बहुत महत्वपूर्ण है कि पहले उपयोगकर्ताओं के लिए क्या महत्वपूर्ण है, या तो एक जैसे सॉफ़्टवेयर पर विचार करना और उनका उपयोग करना सीखें या उनके साथ सहयोग करें (आदर्श रूप से दोनों, लेकिन कम से कम उनके साथ सहयोग करें)।