परिचय: प्रदर्शन के लिए TypeScript प्रोफाइलिंग क्यों महत्वपूर्ण है
\nजब आप TypeScript में कोई एप्लिकेशन लिखते हैं, तो यह छोटे डेटा पर तेज़ी से काम कर सकता है, लेकिन प्रोजेक्ट बढ़ने पर अड़चनें दिखाई देने लगती हैं — कोड के वे हिस्से जो निष्पादन को धीमा कर देते हैं। प्रोफाइलिंग इन समस्या वाली जगहों को खोजने और यह समझने में मदद करती है कि सबसे अधिक समय कहाँ खर्च हो रहा है।
\nइस लेख में, हम जानेंगे कि ब्राउज़र और Node.js के अंतर्निहित टूल का उपयोग करके TypeScript कोड को कैसे प्रोफाइल किया जाए। आप सीखेंगे कि धीमे फंक्शन कैसे खोजें, कॉल स्टैक का विश्लेषण कैसे करें और महत्वपूर्ण भागों को कैसे अनुकूलित करें।
\nयह लेख शुरुआती डेवलपर्स के लिए है जो TypeScript की मूल बातों से पहले से परिचित हैं और अपने एप्लिकेशन के प्रदर्शन में सुधार करना चाहते हैं।
\n\nप्रोफाइलिंग की मूल अवधारणाएँ
\nप्रोफाइलिंग यह डेटा एकत्र करने की प्रक्रिया है कि प्रोग्राम कैसे निष्पादित होता है: फंक्शन कितना समय लेते हैं, उन्हें कितनी बार कॉल किया जाता है, कौन से संसाधन खपत होते हैं।
\nTypeScript के संदर्भ में, कुछ प्रमुख मीट्रिक को समझना महत्वपूर्ण है:
\n- \n
- निष्पादन समय — प्रत्येक फंक्शन कितने मिलीसेकंड लेता है। \n
- कॉल की संख्या — फंक्शन को कितनी बार कॉल किया जाता है। \n
- मेमोरी — कितनी मेमोरी आवंटित और मुक्त की जाती है। \n
- कॉल स्टैक — फंक्शन कॉल का क्रम। \n
TypeScript कोड को प्रोफाइल करने के लिए, आप ब्राउज़र टूल (Chrome DevTools) और Node.js उपयोगिताओं (जैसे --inspect या clinic.js) दोनों का उपयोग कर सकते हैं।
TypeScript प्रोफाइलिंग के लिए उपकरण
\nक्लाइंट कोड के लिए Chrome DevTools
\nयदि आपका TypeScript एप्लिकेशन ब्राउज़र में चलता है, तो सबसे अच्छा उपकरण अंतर्निहित Chrome DevTools है। Performance टैब खोलें और रिकॉर्ड बटन दबाएँ। पेज पर कोई क्रिया करें, रिकॉर्डिंग रोकें और टाइमलाइन प्राप्त करें।
\nविश्लेषण का उदाहरण: आप देखते हैं कि फंक्शन processData 300 मिलीसेकंड ले रहा है। यह अनुकूलन का संकेत है।
Node.js और अंतर्निहित प्रोफाइलर
\nसर्वर-साइड TypeScript कोड (Node.js) के लिए, --inspect या --prof फ्लैग का उपयोग करें। उदाहरण के लिए:
node --inspect dist/app.js\nफिर ब्राउज़र में chrome://inspect खोलें और प्रक्रिया से कनेक्ट करें। आपको सर्वर कोड के लिए भी वही DevTools क्षमताएँ मिलेंगी।
clinic.js — Node.js के लिए एक सरल उपयोगिता
\nclinic.js को वैश्विक रूप से स्थापित करें:
npm install -g clinic\nप्रोफाइलिंग शुरू करें:
\nclinic doctor -- node dist/app.js\nयह उपयोगिता सिफारिशों के साथ एक दृश्य रिपोर्ट दिखाएगी।
\n\nव्यवहार में अड़चनें खोजना
\nउदाहरण 1: धीमी ऐरे सॉर्टिंग
\nमान लीजिए कि आपके पास बड़ी ऑब्जेक्ट ऐरे को सॉर्ट करने का एक फंक्शन है:
\ninterface User {\n id: number;\n name: string;\n age: number;\n}\n\nfunction sortUsers(users: User[]): User[] {\n return users.sort((a, b) => {\n // धीमी स्ट्रिंग तुलना\n const nameA = a.name.toLowerCase();\n const nameB = b.name.toLowerCase();\n if (nameA < nameB) return -1;\n if (nameA > nameB) return 1;\n return 0;\n });\n}\nप्रोफाइलिंग करते समय, आप देखेंगे कि प्रत्येक तुलना के लिए toLowerCase() कॉल किया जा रहा है, और ये तुलनाएँ O(n log n) हो सकती हैं। अड़चन स्ट्रिंग का बार-बार रूपांतरण है।
अनुकूलन: स्ट्रिंग को पहले से रूपांतरित करें:
\nfunction sortUsersOptimized(users: User[]): User[] {\n return users\n .map(user => ({\n ...user,\n _lowerName: user.name.toLowerCase()\n }))\n .sort((a, b) => {\n if (a._lowerName < b._lowerName) return -1;\n if (a._lowerName > b._lowerName) return 1;\n return 0;\n