बस-इन-टाइम (जीईटी) बनाम अहेड-ऑफ-टाइम (एओटी) संकलन कोणीय में


111

मैं इस प्रलेखन का उल्लेख कर रहा था और संकलन अवधारणा पर आया था। कोई भी JIT या AOT संकलन का उपयोग कर सकता है। हालाँकि, मैंने इसे बहुत संक्षिप्त पाया और विवरण में निम्नलिखित बिंदुओं को जानने की आवश्यकता है,

  • उन दो तकनीकों के बीच अंतर
  • कब क्या उपयोग करना है, इसके बारे में सिफारिश

जवाबों:


148

JIT - इसे निष्पादित करने के लिए समय में टाइप टाइपस्क्रिप्ट संकलित करें।

  • ब्राउज़र में संकलित।
  • प्रत्येक फ़ाइल अलग से संकलित।
  • अपना कोड बदलने और ब्राउज़र पृष्ठ को फिर से लोड करने से पहले बनाने की आवश्यकता नहीं है।
  • स्थानीय विकास के लिए उपयुक्त है।

एओटी - बिल्ड चरण के दौरान टाइप टाइपस्क्रिप्ट।

  • कमांड लाइन (फास्टर) के माध्यम से ही मशीन द्वारा संकलित किया गया।
  • स्क्रिप्ट में HTML / CSS को सम्मिलित करते हुए सभी कोड एक साथ संकलित किए गए।
  • संकलक (आधा कोणीय आकार) को तैनात करने की आवश्यकता नहीं है।
  • अधिक सुरक्षित, मूल स्रोत का खुलासा नहीं किया गया।
  • उत्पादन के लिए उपयुक्त है।

2
इसके अलावा, मैंने जस्ट-इन-टाइम संकलन का उपयोग करते समय बहुत खराब प्रदर्शन का अनुभव किया, खासकर पुराने एंड्रॉइड डिवाइसों पर। इसके अलावा, पहले पृष्ठ के लोड पर रेंडर-गैप बहुत बड़ा है (आपके प्रोजेक्ट के आकार के आधार पर 10 सेकंड तक पुराने एंड्रॉइड डिवाइस पर)।
फेलिक्स हैप्पीस्पेल

29
टाइपस्क्रिप्ट केवल समय में संकलित नहीं की जाती है, ब्राउज़र ऐसा नहीं कर सकता है। दोनों ही मामलों में, निर्माण प्रक्रिया के दौरान टाइपस्क्रिप्ट संकलित की जाती है।
रॉबस्टे

2
@Robouste: यह वास्तव में मुझे भ्रमित करता है .. क्या वास्तव में समय से पहले और बस समय में संकलित किया जाता है .. (यदि टीजेएस को तुरंत संकलित किया जाता है)। जब मैं एक्सप्लोरर में एक पेज का अनुरोध करता हूं, तो जावास्क्रिप्ट को डाउनलोड किया जाएगा और ब्राउज़र में निष्पादित किया जाएगा, क्या किसी भी टाइप किए गए जे को ब्राउज़र में आने की आवश्यकता है ??? नहीं, बिल्कुल नहीं ... तो क्या समय से पहले और सिर्फ समय में संकलित किया जा रहा है .. ?? यह वास्तव में कोणीय कंपाइलर है जिसका मतलब है। यह लिंक सभी प्रश्नों का उत्तर देगा: " angular.io/guide/aot-compiler "
Assil

2
मैं एक विशेषज्ञ नहीं हूं लेकिन जेआईटी का उपयोग करते समय, कोणीय स्रोत ब्राउज़र को भेजे जाते हैं और यह एप्लिकेशन को संकलित करेगा। यह आपको गतिशील सामान रखने की अनुमति देता है जिसे रनटाइम पर संकलित करने की आवश्यकता होती है। एओटी के साथ, सब कुछ पूर्व-संकलित है इसलिए सर्वर एक सामान्य जावास्क्रिप्ट वेबसाइट भेज रहा है। आप गति निष्पादन और कम लोडिंग समय प्राप्त करते हैं।
रोबोएस्ट

शानदार जवाब, टिप्पणियाँ भी मेरे लिए उपयोगी।
रक्षित शाह

61

हालाँकि कुछ उत्तर हैं, लेकिन मैं अपने कुछ निष्कर्षों को भी जोड़ना चाहूंगा, क्योंकि मैं वास्तव में इस उलझन में था कि वास्तव में सभी मामलों में क्या संकलित किया जा रहा है , TS-> JSरूपांतरण होता है। मैं जेफ के ब्लॉग से एक संदर्भ के रूप में कुछ पैरा ले रहा हूं ।

JIT

TSकोड डेवलपर द्वारा लिखित को संकलित किया गया है JSकोड। अब, यह संकलित jsकोड फिर से ब्राउज़र द्वारा संकलित किया जाता है ताकि htmlउपयोगकर्ता क्रिया के अनुसार गतिशील रूप से प्रदान किया जा सके और तदनुसार angular घटकों के लिए कोड , परिवर्तन का पता लगाने, निर्भरता इंजेक्शन) भी रनटाइम पर उत्पन्न हो।

(ब्राउज़र कंपाइलर वही है जो किसी एप्लिकेशन के निर्देशों और घटकों को अपने संबंधित HTML और CSS के साथ लेता है, और घटक कारखानों को उनके सभी व्यूअर लॉजिक के साथ इंस्टेंस को जल्दी से स्टैम्प करने के लिए बनाता है।)

जब एक कोणीय 2 एप्लिकेशन को ब्राउज़र में बूटस्ट्रैप किया जाता है, तो JIT संकलक रनटाइम में एप्लिकेशन के घटकों का विश्लेषण करने और मेमोरी में कोड उत्पन्न करने के लिए बहुत काम करता है। जब पृष्ठ रीफ्रेश किया जाता है, तो जो भी काम किया गया है, वह सब फेंक दिया जाता है, और जेआईटी कंपाइलर फिर से काम करता है।

AOT

TSकोड डेवलपर द्वारा लिखित को संकलित किया गया है JSकोड, यह js पहले से ही साथ ही कोणीय के लिए संकलित किया गया है । अब, यह संकलित js कोड फिर से ब्राउज़र द्वारा संकलित किया जाता है ताकि htmlइसे प्रदान किया जा सके। लेकिन, यहाँ पकड़ यह है कि संकलक angularद्वारा पहले से ही सुविधाओं का ध्यान रखा गया है AOTऔर इसलिए ब्राउज़र को घटक निर्माण, परिवर्तन का पता लगाने, निर्भरता इंजेक्शन के बारे में ज्यादा चिंता करने की आवश्यकता नहीं है । तो हमारे पास :

तेजी से प्रतिपादन

एओटी के साथ, ब्राउज़र एप्लिकेशन का एक पूर्व संकलित संस्करण डाउनलोड करता है। ब्राउज़र निष्पादन योग्य कोड को लोड करता है इसलिए यह एप्लिकेशन को पहले संकलित किए बिना तुरंत आवेदन प्रस्तुत कर सकता है।

कम अतुल्यकालिक अनुरोध

कंपाइलर बाहरी HTML टेम्प्लेट और सीएसएस स्टाइल शीट को एप्लिकेशन जावास्क्रिप्ट के भीतर रखता है, जिससे उन सोर्स फाइल्स के लिए अलग-अलग अजाक्स अनुरोध समाप्त हो जाते हैं।

छोटे कोणीय रूपरेखा डाउनलोड आकार

यदि ऐप पहले से ही संकलित है, तो कोणीय संकलक को डाउनलोड करने की कोई आवश्यकता नहीं है। कंपाइलर लगभग कोणीय का आधा है, इसलिए इसे नाटकीय रूप से छोड़ने से एप्लिकेशन पेलोड कम हो जाता है।

पहले टेम्प्लेट त्रुटियों का पता लगाएं

AOT कंपाइलर उपयोगकर्ताओं को देखने से पहले बिल्ड चरण के दौरान टेम्पलेट बाइंडिंग त्रुटियों का पता लगाता है और रिपोर्ट करता है।

बेहतर सुरक्षा

AOT HTML टेम्प्लेट और कंपोनेंट्स को क्लाइंट के सामने सर्विस करने से बहुत पहले जावास्क्रिप्ट फाइल में संकलित करता है। पढ़ने के लिए कोई टेम्पलेट नहीं है और कोई जोखिम भरा क्लाइंट-साइड HTML या जावास्क्रिप्ट मूल्यांकन नहीं है, इंजेक्शन हमलों के लिए कम अवसर हैं।


शेष अंतर पहले से ही बेन्यामिन, निसार और गौरांग के बुलेट बिंदुओं में शामिल हैं।

बेझिझक मुझे सुधारो


5
धन्यवाद। मैं अंत में आपके उत्तर को पढ़ने के बाद समझ गया और मैंने उनमें से बहुत कुछ पढ़ा।
मारियो सबोटिक

24

बेनामिन और निसार ने यहां कुछ अच्छे बिंदुओं का उल्लेख किया है। मैं इसमें जोड़ दूंगा।

सैद्धांतिक रूप से, एओटी उत्पादन उद्देश्य के लिए जेआईटी की तुलना में एक आकर्षक विकल्प दिखता है, लेकिन मुझे संदेह था कि क्या एओटी वास्तव में इसके लायक है!

खैर, मुझे जेफ क्रॉस द्वारा अच्छे आँकड़े मिले और यह साबित होता है कि एओटी ऐप के बूटस्ट्रैपिंग समय को काफी कम कर देता है। जेफ क्रॉस के पोस्ट से नीचे स्नैप आपको इसके बारे में त्वरित विचार देगा,

यहां छवि विवरण दर्ज करें


19

जीटीटी (बस समय में) संकलन

नाम ही काम करने का वर्णन करता है, यह कोड को ब्राउज़र में पृष्ठ को लोड करने के समय में संकलित करता है। ब्राउज़र कंपाइलर को डाउनलोड करेगा और एप्लिकेशन कोड का निर्माण करेगा और उसे रेंडर करेगा।

यह विकास के माहौल के लिए अच्छा होगा।

एओटी (समय से आगे) संकलन

यह एप्लिकेशन के निर्माण के समय सभी कोड को संकलित करता है। इसलिए ब्राउज़र कंपाइलर को डाउनलोड करने और कोड संकलित नहीं करना चाहता है। इस विधि में ब्राउज़र आसानी से पहले से संकलित कोड को लोड करके एप्लिकेशन को आसानी से प्रस्तुत कर सकता है।

उत्पादन वातावरण में इस्तेमाल किया जा सकता है

हम नीचे के रूप में जीटीटी और एओटी संकलन की तुलना कर सकते हैं

यहां छवि विवरण दर्ज करें


1
क्या इसका मतलब यह होगा कि जीईटी एप्लिकेशन पहली बार तेजी से लोड होगा लेकिन इसके बाद एओटी एप्लिकेशन हमेशा तेजी से लोड होगा?
जेकेएल

कभी नहीँ। जीओटी एओटी की तुलना में धीमी गति से लोड होता है
विवेकानुकिन

AOT JIT की तुलना में धीमा है क्योंकि यह रनटाइम पर शिकायत नहीं करता है। आपको jit और aot शीर्षकों को बदलना होगा
Mr.AF

17

JIT (जस्ट-इन-टाइम संकलन)

जस्ट-इन-टाइम (JIT) एक प्रकार का संकलन है जो आपके ऐप को रनटाइम में ब्राउज़र में संकलित करता है।

ng build
ng serve

यहां छवि विवरण दर्ज करें

एओटी (आगे का समय संकलन)

अहेड-ऑफ-टाइम (एओटी) एक प्रकार का संकलन है जो आपके ऐप को बिल्ड समय पर संकलित करता है।

ng build --aot
ng serve --aot

यहां छवि विवरण दर्ज करें


2
इन 2 आंकड़ों में क्या अंतर है? क्या इसे इंट्रो की जरूरत नहीं है?
मिस्टर एसएएफ

इसलिए मूल रूप से अहेड-ऑफ-टाइम अहेड-ऑफ-रनटाइम की तरह है।
अलीरज़ा काहेई

@ Mr.AF ने अभी देखा कि अब, चित्र समान हैं।
टियागो मार्टिंस पेरेज Mart

14

दिन के अंत में, एओटी (अहेड-ऑफ-टाइम) और जेआईटी (जस्ट-इन-टाइम) एक ही काम करते हैं। वे दोनों आपके कोणीय कोड को संकलित करते हैं इसलिए यह एक देशी वातावरण (ब्राउज़र उर्फ) में चल सकता है। मुख्य अंतर तब होता है जब संकलन होता है। एओटी के साथ, आपका कोड ब्राउज़र में ऐप डाउनलोड करने से पहले संकलित किया जाता है। JIT के साथ, आपका कोड ब्राउज़र में रनटाइम पर संकलित किया जाता है।

यहाँ तुलना है: यहां छवि विवरण दर्ज करें

एओटी के लाभ:

  • पार्सिंग और संकलन के रूप में तेज़ स्टार्टअप ब्राउज़र में नहीं होता है।
  • विकास के दौरान टेम्प्लेट की जाँच की जाती है (जिसका अर्थ है कि सभी त्रुटियां जो हम चल रहे ऐप्स में जावास्क्रिप्ट कंसोल में देखते हैं अन्यथा हमारी बिल्ड प्रक्रिया में फेंक दी जाएगी)।
  • अप्रयुक्त सुविधाओं के रूप में छोटे फ़ाइल का आकार निकाला जा सकता है और कंपाइलर स्वयं शिप नहीं किया जाता है।

4

वास्तव में केवल एक कोणीय संकलक है। एओटी और जेआईटी के बीच का अंतर टाइमिंग और टूलिंग का मामला है। एओटी के साथ, संकलक एक बार पुस्तकालयों के एक सेट का उपयोग करके निर्माण समय पर चलता है; जेआईटी के साथ यह प्रत्येक उपयोगकर्ता के लिए रनटाइम पर पुस्तकालयों के एक अलग सेट का उपयोग करके हर बार चलता है।


2

जेआईटी संकलक हम कोणीय परियोजना के विकास के दौरान उपयोग करते हैं। इस संकलन में (TS to JS रूपांतरण) एप्लिकेशन के रनटाइम के दौरान होता है। जहां AOT का उपयोग उत्पादन में एप्लिकेशन की तैनाती के लिए एप्लिकेशन कोड के निर्माण के दौरान किया जाता है, उस समय हम एनजी बिल्ड --prod कमांड का उपयोग करके अपना एप्लिकेशन कोड बनाते हैं जो वेबपैक नामक एक फ़ोल्डर उत्पन्न करता है, वेबपैक में सभी फाइलों का बंडल होता है (HTML , सीएसएस और टाइपस्क्रिप्ट) जावास्क्रिप्ट जावास्क्रिप्ट प्रारूप में।

उत्पादन के लिए उत्पन्न वेबपैक फ़ोल्डर का आकार विकास पर्यावरण (कमांड का उपयोग करके ... एनजी बिल्ड) के लिए उत्पन्न फ़ोल्डर की तुलना में बहुत कम है, क्योंकि इसमें वेबपैक फ़ोल्डर के अंदर संकलक नहीं है, यह आवेदन के प्रदर्शन में सुधार करता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.