8

में स्विच मामलों से मृत कोड हटाने क्या कोई कंप्रेसर स्विच मामलों को हटाने का ख्याल रखता है जिसे एप्लिकेशन में कहीं भी नहीं कहा जाता है?जावास्क्रिप्ट

function execute_case(id) { 
    switch(id) { 
    case 0: 
     console.log("0"); 
     break; 
    case 1: 
     console.log("1"); 
     break; 
    case 2: 
     console.log("2"); 
     break; 
    case 3: 
     console.log("3"); 
     break; 
    default: 
     console.log("default"); 
     break; 
    } 
} 

execute_case(1); 

यदि उपरोक्त सभी मेरे पास है है, तो सैद्धांतिक रूप से मामलों 0,2,3 मृत कोड होते हैं और क्रियान्वित किया जा कभी नहीं होगा। क्या किसी कंप्रेसर को कोड को छोटा करते समय इस कोड को हटाने की खुफिया जानकारी है?

मैं कोड के एक टुकड़े को देख रहा हूं जिसमें स्विच स्टेटमेंट में 200,000 से अधिक मामले हैं, और इसलिए सवाल है।

धन्यवाद, -Vikrant

+0

इसके लिए आपको कचरा संग्रहण सामग्री के साथ अपने हाथों को गंदे करना होगा। मैं कहूंगा .. अपने कोडिंग का आनंद लें –

+5

मैं पूछने में संकोच करता हूं, लेकिन, 200 के केस स्टेटमेंट्स? WTF? –

+0

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

उत्तर

3

नहीं महोदय,

id परिवर्तनशील है, कोई कंप्रेसर "पता" होगा कि ऐसा नहीं कर सकते हैं। कंप्रेसर स्विच कथन में वैरिएबल वैल्यू का विश्लेषण नहीं करते हैं और जानते हैं कि उन्हें कैसे निकालें।

यदि आप इन मामलों को "पता" नहीं करेंगे, तो बस उन्हें स्वयं हटा दें।

+0

वास्तव में, किसी मामले की गारंटी के लिए बहुत से "क्या-ifs" को हिट नहीं किया जाएगा (क्या होगा यदि यह एक चर पारित हो गया है, तो क्या होगा यदि वह चर एक AJAX कॉल से आया, तो क्या होगा अगर गणित शामिल था, तो क्या होगा ...) –

+0

एक कमांड स्टेटमेंट, ब्रैड। मुझे आशा है कि ओपी सुनता है। –

+1

मुझे लगता है कि वह संकलक को यह नोटिस करने की उम्मीद कर रहा है कि फ़ंक्शन केवल एक ही स्थान से कहा जाता है, और उस स्थान पर निरंतर पैरामीटर होता है, इसलिए यह फ़ंक्शन परिभाषा में निरंतर प्रसार कर सकता है। – Barmar

3

कुछ भी निश्चित रूप से आपको मृत केस स्टेटमेंट की सूची देने वाला नहीं है। यदि यह कहता है कि यह किसी अन्य मूल्य (सीमित कोड शाखाकरण) की कोई संभावना नहीं है या यह झूठ बोल रहा है। तो जब तक कि आप हर संभव मूल्य को नहीं जानते हैं जिसे execute_case पर पारित किया जा सकता है, तो आप अंधेरे में होंगे। (और मुझे लगता है कि आपने सवाल नहीं दिया है)।

क्या आप कर सकते हैं उस कोड में एक छोटा लॉगर होता है जो उस स्विच को पास किए गए मानों को आउटपुट/रिकॉर्ड करता है। फिर, [अच्छी मात्रा] और/या कई हज़ार निष्पादन पर, ट्रैक करें कि कौन से लोगों को मारा जा रहा है और कौन से नहीं हैं। मैं उन लोगों को जरूरी नहीं हटाऊंगा जिन्हें हिट नहीं किया जा रहा है, लेकिन शायद उन्हें बहिष्कृत करने की कोशिश करें और लंबे समय तक/अधिक निष्पादन की प्रतीक्षा करें जब तक कि आप निष्कर्ष तक नहीं पहुंच जाते, अब यह आवश्यक नहीं है।

+0

अच्छी तरह से, इस मामले में, मेरे पास सभी संभावित कॉल खोजने का एक तरीका है। यहां कोई गतिशील कॉल नहीं है। स्विच आईडी के साथ सभी प्रत्यक्ष आमंत्रण स्पष्ट रूप से एक संख्या होने के कारण हैं। तो, यह मुझे एक grep खर्च होंगे | सभी मान्य मामलों को पाने के लिए uniq। लेकिन सेट मैन्युअल रूप से हटाने के लिए अभी भी बहुत बड़ा (200K) है। और यह भी खतरा है कि यदि कुछ मामला जो आज अप्रयुक्त नहीं है, तो कल जो कुछ नया जोड़ता है, उसके कारण हमें उपयोग किया जाता है, तो हमें इसे फिर से करना होगा। minifier उस सब का ख्याल रखा होगा। एक विशेष मामले के साथ minifier हो सकता है (- ऐसे मामलों के लिएstrict_case_minification) – v2b

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