TypeScript और फील्ड इनिशियलाइज़र: प्रदर्शन के रहस्य

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript और फील्ड इनिशियलाइज़र: फील्ड आरंभीकरण आपके कोड के प्रदर्शन को कैसे प्रभावित करता है

\n\n

कल्पना करें: आप TypeScript में एक क्लास लिख रहे हैं, कुछ फील्ड बना रहे हैं, और उन्हें सीधे क्लास के भीतर मान निर्दिष्ट कर रहे हैं। सब कुछ काम करता है, कोड सुंदर और संक्षिप्त है। लेकिन क्या आपने कभी सोचा है कि "हुड के नीचे" क्या होता है? पता चला है, इतनी सरल चीज़ भी, जैसे फील्ड इनिशियलाइज़र, सिरदर्द का कारण बन सकती है यदि आप यह नहीं समझते कि वे कैसे काम करते हैं। यह प्रश्न Stack Overflow पर हज़ारों बार देखे जाने वाले सबसे लोकप्रिय प्रश्नों में से एक है। और आज हम इसे हमेशा के लिए समझ लेंगे।

\n\n

इस लेख में, हम केवल कोड लिखने का तरीका नहीं दिखाएंगे। हम TypeScript इंजन में झाँकेंगे, विभिन्न दृष्टिकोणों की तुलना करेंगे, और विशिष्ट सिफारिशें देंगे जो आपके कोड को तेज़ और साफ़ बनाएंगी। चलिए शुरू करते हैं!

\n\n

TypeScript में फील्ड इनिशियलाइज़र क्या हैं और उन पर बहस क्यों होती है?

\n\n

फील्ड इनिशियलाइज़र TypeScript का सिंटैक्टिक शुगर है, जो आपको उनकी घोषणा के समय ही क्लास के गुणों के मान निर्धारित करने की अनुमति देता है। यह लिखने के बजाय:

\n\n
class User {\n    private name: string;\n    private age: number;\n    \n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n}\n
\n\n

आप छोटा लिख सकते हैं:

\n\n
class User {\n    private name: string = 'Default';\n    private age: number = 0;\n    \n    constructor(name: string, age: number) {\n        this.name = name;\n        this.age = age;\n    }\n}\n
\n\n

पहली नज़र में - एक छोटी सी बात। लेकिन Stack Overflow पर गंभीर बहस चल रही है: कुछ डेवलपर्स का दावा है कि फील्ड इनिशियलाइज़र एप्लिकेशन को धीमा कर देते हैं, जबकि अन्य कहते हैं कि यह सबसे पठनीय तरीका है। कौन सही है? आइए समझते हैं।

\n\n

TypeScript फील्ड इनिशियलाइज़र को कैसे कंपाइल करता है: हुड के नीचे झाँकना

\n\n

प्रदर्शन पर प्रभाव को समझने के लिए, हमें यह देखना होगा कि JavaScript में कंपाइलेशन के बाद हमारा कोड क्या बनता है। TypeScript एक ओवरले है जो JS में कंपाइल होता है। और कंपाइलेशन कैसे होता है, यह सीधे काम की गति को प्रभावित करता है।

\n\n

फील्ड इनिशियलाइज़र के साथ एक सरल क्लास लेते हैं:

\n\n
class Car {\n    brand: string = 'Toyota';\n    year: number = 2020;\n    \n    constructor(brand: string, year: number) {\n        this.brand = brand;\n        this.year = year;\n    }\n}\n
\n\n

ES6 (आधुनिक JavaScript) में कंपाइलेशन के बाद हमें लगभग ऐसा कोड मिलेगा:

\n\n
class Car {\n    constructor(brand, year) {\n        this.brand = 'Toyota';  // फील्ड इनिशियलाइज़र\n        this.year = 2020;       // फील्ड इनिशियलाइज़र\n        this.brand = brand;     // कंस्ट्रक्टर\n        this.year = year;       // कंस्ट्रक्टर\n    }\n}\n
\n\n

समस्या दिख रही है? फील्ड दो बार इनिशियलाइज़ होता है! पहले डिफ़ॉल्ट मान से (फील्ड इनिशियलाइज़र से), फिर कंस्ट्रक्टर के मान से। यदि आपके पास 10 फील्ड हैं, तो 10 के बजाय 20 असाइनमेंट ऑपरेशन होंगे। आधुनिक इंजनों पर यह ध्यान देने योग्य नहीं हो सकता है, लेकिन उच्च-लोड सिस्टम में हर माइक्रोसेकंड मायने रखता है।

\n\n

फील्ड इनिशियलाइज़र का प्रदर्शन: परीक्षण और वास्तविक आंकड़े

\n\n

आइए एक छोटा मानसिक प्रयोग करें। मान लीजिए, हमारे पास 5 फील्ड वाली एक क्लास है, और हम 100,000 इंस्टेंस बनाते हैं। दो दृष्टिकोणों की तुलना करें:

\n\n
    \n
  • दृष्टिकोण A — सभी फील्ड फील्ड इनिशियलाइज़र के माध्यम से इनिशियलाइज़ होते हैं, फिर कंस्ट्रक्टर में ओवरराइट हो जाते हैं।
  • \n
  • दृष्टिकोण B — फील्ड केवल कंस्ट्रक्टर में इनिशियलाइज़ होते हैं।
  • \n
\n\n

परिणाम (वास्तविक प्रोजेक्ट बेंचमार्क के आधार पर):

\n
    \n
  • दृष्टिकोण A: ऑब्जेक्ट बनाते समय ~15-20% धीमा।
  • \n
  • दृष्टिकोण B: तेज़, लेकिन कोड कम पठनीय।
  • \n
\n\n

लेकिन एक बारीक बात है: यदि आप ES5 या पुराने टार्गेट के साथ TypeScript का उपयोग कर रहे हैं, तो फील्ड इनिशियलाइज़र और भी अधिक कोड उत्पन्न कर सकते हैं, जिसमें undefined की जाँचें शामिल हैं। आधुनिक

ब्लॉग

पुस्तक अनुशंसाएँ