מהדר {{AOT vs JIT}} לעומת מהדר התגובות: חלק - I

נתחיל בהשוואת המתורגמן והמהדר

מהדר מ- X ל- Y הוא תוכנית המתרגמת כל תוכנית p משפה כלשהי X לתוכנית שקולה סמנטית p ′ באיזו שפה Y באופן שהסמנטיקה של התוכנית נשמרת, כלומר פירוש p ′ עם מתורגמן עבור Y יניב את אותן תוצאות ויהיו להם אותן השפעות כמו פירוש p עם מתורגמן ל- X.

מהדר === מתרגם

המהדר לעומת המתורגמן

מתורגמן לשפה A היא תוכנית שמבצעת כל תוכנית p שנכתבת בשפה X כך שתבצע את ההשפעות ותעריך את התוצאות כפי שנקבעו על ידי המפרט של X.

מיירט === מוציא להורג

מהדר בזווית 1

מהדר גנרי

מהדר AngularJS 1.x שהוא די גנרי באופיו שעובד עבור כל תבנית על ידי ביצוע מערך של חישובים דינמיים. בשל אופי זה, מכונה וירטואלית של JavaScript נאבקת במיטוב החישוב ברמה התחתונה. הסיבה העיקרית מאחור היא:

"VM לא מכיר את הצורות של האובייקטים שמספקים את ההיגיון לבדיקת מלוכלך (כלומר, מה שמכונה היקף). זה מטמונים מוטבעים מקבלים הרבה פספוסים שמאטים את הביצוע".

מהדרים ב- Angular 2 ++

JIT

בשלב הראשוני של יישום Angular 2 כאשר מופעל על ידי boot booting בדפדפן, מהדר ה- JIT מבצע עבודה רבה (ניתוח ניתוח תבניות הרכיב בכל פעם שהמשתמש פותח את דף האינטרנט, חלק שהופך תבניות HTML לקוד הניתן לריצה) כדי לנתח את הרכיבים ביישום בזמן ריצה וייצור קוד בזיכרון. כאשר הדף רענן, כל העבודות שנעשו נזרקות, ומהדר JIT מבצע את העבודה מחדש. זה היה המפלגה העיקרית של AOT

שטף אירועים עם אוספים בזמן

  • פיתוח אפליקציה זוויתית עם TypeScript וקומפילציה של היישום עם Tsc.
  • חבילה → הפחתה → פריסה
  • אצל הלקוח → הורד את כל נכסי ה- JavaScript → רצועות אתחול זוויתיות → Angular עוברת את תהליך ההדרכה של JiT → היישום מקבל שניתנה
סקירה כללית של JIT

AOT

המהדר הופך את קוד ה- TS לקוד JS (JS זה כבר הוכן גם עבור זוויתי). כעת, קוד JS מורכב זה שוב מורכב על ידי הדפדפן שוב כך שניתן יהיה לעבד את ה- HTML. לפיכך, התכונות של זוויתיות כבר טופלו על ידי מהדר AOT ומכאן שהדפדפן אינו צריך לדאוג הרבה מאיתור שינויים, יצירת רכיבים והזרקת תלות.

אוסף AOT

כך אנו מעבירים את ההדרכה משעת הריצה (הדפדפן) לדור קוד המקור. בדרך זו ההילוך מתרחש רק פעם אחת בזמן הבנייה ואנחנו כבר לא צריכים להעביר את המהדר הזוויתי ואת תבניות ה- HTML לתוך הצרור.

ב- Angular 5+, תוכלו להזניח את JiT ולעבור ל- AoT מלא, אפילו לבניית פיתוח !!!

זרימת אירועים עם אוספים לפני הזמן

  • פיתוח אפליקציה זוויתית באמצעות TypeScript → אוסף היישום עם ngc → מבצע אוסף התבניות עם המהדר Angular ומייצר (בדרך כלל) TypeScript
  • אוסף קוד TypeScript ל- JavaScript → חבילה → מזעור → פריסה
  • לקוח → הורד את כל הנכסים → רצועות אתחול זוויתיות ומעבודות יישום
סקירה כללית של חבילות AOT

תכונות AOT

עיבוד מהיר יותר, פחות בקשות אסינכרוניות, גודל הורדת מסגרת זוויתית קטנה יותר וגילוי שגיאות תבנית קודם לכן

מהדר בתגובה

JSX תומך ב- Babel ו- TypeScript כבר מתחילת הזמן, מה שהפך את האינטגרציה לבניית JavaScript לקלה ולהגיב לא אכפת מהגירסה שמשמשת גם את Babel וגם את TypeScript וזה פחות דאגה.

מהדר ה- React הראשון מעריך עצי רכיב של React ועושה אופטימיזציות נבונות לרכיבי ה- React שלך. מהדר תגובת חייב לדעת את רכיב השורש של צרור היישומים ופעם אחת כי עליו להבין באופן אוטומטי את כל עץ הרכיבים של הרכיבים מזה.

כדי לספר למהדר React מהו רכיב השורש ליישום שלך, עליך להשתמש בפונקציה גלובלית של Prepack בשם __optimizeReactComponentTree (MyRootReactComponent). לדוגמה בקוד המקור שלך (לפני שתאגד אותו ותעביר אותו למארז) אתה עשוי לעשות:

// MyComponent.js
יבוא תגובה מ'הגיב ';
המחלקה MyComponent מרחיבה את React.Component {
  render () {
    חזור  שלום עולם! ;
  }
}
// __optimizeReactComponentTree ידוע רק בשם Prepack
// אז אנחנו עוטפים את זה בתנאי כך שהקוד עדיין עובד
// לבדיקת פיתוח מקומי ללא Prpeack
אם (גלובלי .__ optimizeReactComponentTree) {
  __optimizeReactComponentTree (MyComponent);
}
module.exports = MyComponent;

React מורכב לקוד JavaScript שמפעיל את ה- DOM הווירטואלי ואילו Angular מקבץ לקוד JavaScript שמפעיל את ה- DOM באופן ישיר. אין הבנה עמוקה במיוחד של זוויתית וגם מגיבה ברמת הקוד. בואו לחקור יותר בבלוג הבא שלי. :)