परिचय: TypeScript को प्रोफाइल क्यों करें?
TypeScript स्केलेबल एप्लिकेशन विकसित करने के लिए एक शक्तिशाली उपकरण है, लेकिन सबसे अच्छी तरह से टाइप किया गया कोड भी प्रदर्शन की छिपी समस्याओं से ग्रस्त हो सकता है। अड़चनें (bottlenecks) अकुशल एल्गोरिदम, अत्यधिक इनपुट-आउटपुट संचालन, मेमोरी के अनुचित प्रबंधन या धीमी गणनाओं के कारण उत्पन्न होती हैं। प्रोफाइलिंग इन क्षेत्रों की पहचान करने और उन्हें लक्षित रूप से अनुकूलित करने में मदद करती है।
इस लेख में, हम TypeScript कोड को प्रोफाइल करने के व्यावहारिक तरीकों पर विचार करेंगे: ब्राउज़र के अंतर्निहित टूल्स से लेकर Node.js के लिए विशेष उपयोगिताओं तक। आप धीमे फंक्शन खोजना, कॉल स्टैक का विश्लेषण करना और डेटा के आधार पर निर्णय लेना सीखेंगे।
TypeScript प्रोफाइलिंग टूल्स
TypeScript कोड का प्रोफाइलिंग JavaScript के प्रोफाइलिंग से अलग नहीं है, क्योंकि TypeScript JS में कंपाइल होता है। हालांकि, यह ध्यान रखना महत्वपूर्ण है कि TypeScript में मूल कोड में अतिरिक्त एब्स्ट्रैक्शन (जेनेरिक, डेकोरेटर, इंटरफेस) हो सकते हैं, जो कंपाइलेशन के बाद गैर-स्पष्ट पैटर्न उत्पन्न कर सकते हैं।
1. Chrome DevTools Performance
फ्रंटएंड एप्लिकेशन के लिए, सबसे अच्छा विकल्प Chrome DevTools में Performance टैब है। यह पेज की गतिविधि रिकॉर्ड करता है और फ्रेम ग्राफ, फंक्शन निष्पादन समय, इवेंट और मेमोरी उपयोग दिखाता है।
कैसे उपयोग करें:
- DevTools खोलें (F12) → Performance टैब।
- रिकॉर्ड बटन (गोला) दबाएं, पेज पर आवश्यक कार्रवाई करें।
- रिकॉर्डिंग रोकें और flame chart का अध्ययन करें।
उदाहरण: यदि आपके पास एक ऐरे प्रोसेसिंग फंक्शन है जो 100 ms से अधिक समय लेता है, तो आप इसे ग्राफ पर एक चौड़े ब्लॉक के रूप में देखेंगे। उस पर क्लिक करें — DevTools मूल कोड (यदि source maps कनेक्टेड हैं) और निष्पादन समय दिखाएगा।
// मूल TypeScript कोडfunction processItems(items: number[]): number[] { return items .filter(x => x > 10) .map(x => x * 2) .reduce((acc, val) => acc + val, 0);}प्रोफाइलिंग के बाद, आप देख सकते हैं कि filter और map मध्यवर्ती ऐरे बनाते हैं, जो बड़े डेटा पर काम को धीमा कर देता है। अनुकूलन — चेन को for या reduce के साथ एक पास से बदलना।
2. Node.js अंतर्निहित प्रोफाइलर
Node.js पर सर्वर कोड के लिए, अंतर्निहित V8 प्रोफाइलर का उपयोग करें। यह कॉल स्टैक के सैंपल एकत्र करता है और विश्लेषण करने की अनुमति देता है कि कौन से फंक्शन सबसे अधिक समय ले रहे हैं।
चलाना:
node --prof your-compiled-file.jsनिष्पादन के बाद, एक फ़ाइल isolate-0x...-v8.log दिखाई देगी। इसे पढ़ने योग्य प्रारूप में बदलें:
node --prof-process isolate-0x...-v8.log > profile.txtप्राप्त फ़ाइल में, आप कॉलम के साथ एक तालिका देखेंगे: ticks (सैंपल की संख्या), total (कुल समय), nonlib (लाइब्रेरी को छोड़कर समय) और फंक्शन का नाम। सबसे अधिक ticks वाले फंक्शन आपके अनुकूलन के लिए उम्मीदवार हैं।
3. ts-node और source maps
TypeScript में विकास करते समय, बिना पूर्व कंपाइलेशन के कोड चलाने के लिए अक्सर ts-node का उपयोग किया जाता है। प्रोफाइलिंग के लिए, सुनिश्चित करें कि tsconfig.json में source maps सक्षम हैं:
{ "compilerOptions": { "sourceMap": true, "inlineSourceMap": true }}फिर एप्लिकेशन को --inspect फ्लैग के साथ चलाएं:
node --inspect -r ts-node/register src/app.tsChrome खोलें और chrome://inspect पर जाएं। आप अपना एप्लिकेशन देखेंगे और कंपाइल किए गए JavaScript के बजाय मूल TypeScript कोड देखते हुए प्रोफाइलिंग के लिए DevTools का उपयोग कर सकते हैं।
अड़चनें ढूँढना: व्यावहारिक उदाहरण
तीन विशिष्ट परिदृश्यों पर विचार करें जहाँ प्रोफाइलिंग समस्याओं को खोजने में मदद करती है।
1. लूप में धीमी गणनाएँ
मान लीजिए, आपके पास