2015-02-17 9 views
5

मुझे हाल ही में एक पुस्तकालय विरासत में मिला है, एक अद्यतन विधि है जो कक्षा में मौजूद है। यहाँ एक उदाहरण है।माइक्रो अनुकूलन, क्या यह आधुनिक ब्राउज़र द्वारा वैसे भी अनुकूलित किया गया है?

onPointerMove(pointer, x, y, isPressed){ 
    var floor = Math.floor; 
    var cx = this.currentX; 
    var cy = this.currentY; 
    var tm = this.toolManager; 
} 

इस तरह का कोड ज्यादातर प्रदर्शन महत्वपूर्ण सामग्री पर मौजूद है। अधिकांश परियोजना इस तरह से नहीं लिखी गई है।

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

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

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

मैं वास्तव में जानना चाहता हूं ... इस दिन से आगे, मुझे इन माइक्रो-ऑप्टिमाइज़ेशन (सदाबहार ब्राउज़र के लिए) करना चाहिए और मेरे कोड को अनुकूलित करना चाहिए या 2010 के बाद से चीजें अब थोड़ी देर में चल रही हैं (जब मैं पढ़ता हूं प्रदर्शन जावास्क्रिप्ट)

धन्यवाद!

+1

अनुकूलन न करें (विशेष रूप से: पठनीयता/रखरखाव बलिदान) जब तक आपको कोई समस्या न हो और आपने बाधा/समस्या को खोजने के लिए एक प्रोफाइलर का उपयोग किया हो। वैसे: यदि आप बस एक प्रोफाइलर (या मापने के अन्य साधन) का उपयोग करते हैं तो आप अपने पोस्ट में सवालों के अधिकांश, यदि नहीं, तो सबसे अधिक जवाब दे सकते हैं। बस एक टेस्टकेस बनाएं और प्रोफ़ाइल/इसे मापें। इतना ही आसान। मैं आपको [jsperf.com] (http://jsperf.com/) पर इंगित करता हूं लेकिन यह वर्तमान में नीचे है। – RobIII

+0

RobIII प्रोफाइलिंग इंगित करने के लिए धन्यवाद! मैंने इसे समझने की मेरी टोडो सूची में जोड़ा जो प्रक्रिया बेहतर है। – Clark

उत्तर

3

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

वास्तविक प्रदर्शन के लिए: ऑब्जेक्ट विशेषता लुकअप (जैसे Math.floor या this.currentX) ओ (1) ऑपरेशंस हैं, क्योंकि वे प्रभावी रूप से हैशप लुकअप हैं। उन्हें एक चर के रूप में सहेजना जैसे किसी भी चीज़ की तुलना में एक पठनीयता वृद्धि में अधिक दिखता है।

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