קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ אנגולר ♦ angular lazy loading modules routing

angular lazy loading modules routing

עידן יצחקי 19 בפברואר 2021 אין תגובות

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

אלו הפרויקטים שכדי לשקול מאוד ברצינות לעבוד עם תתי-מודולים ולסדר את הרכיבים בהתאמה לטעינה חלקית של המודולים.

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

לדוגמה:

מודול א' (בסיס – נטען מיד כשהאתר עולה), מודול ב' (נטען רק כאשר גולשים לדף ב') ומודול ג' (גם הוא נטען רק כאשר גולשים לדף ג').

אם דף ג' משתמש ברכיבים שנמצאים במודול ב' זה אומר שאנחנו צריכים לקשור את המודולים אחד לשני, שזה אומר שאם דף ג' עולה, חייבים לטעון את מודול ב' וכך אובד העקרון של טעינה בחלקים או על פי דרישה.

כאשר אנחנו רוצים ליצור מודול חדש ולטעון אותו ב-lazy בפרויקט CLI זה מאוד פשוט וקל

נריץ את הפקודה הבאה מהספריה ששם אנחנו רוצים שהמודול והתיקיה שלו יהיו:

ng generate module customers --route customers --module app.module

כמובן שאת customers תחליפו לשם שמתאים לכם.

תוכלו לראות שבאופן אוטומטי נוצרה ספריה שמכילה בנוסף ל-TS, HTML, SCSS באותו שם , גם ROUTING באותו שם עבור המודול הזה.

תמונת מצב של הקבצים בפרויקט

במקביל app-routing.module.ts התעדכן ונראה כך:

const routes: Routes = [{ path: 'customers',
loadChildren: () => import('./customers/customers.module').then(
  m => m.CustomersModule) }];

שימו לב שקובץ app.module.ts לא התעדכן שיש קובץ חדש וזה כדי להפריד אותם לגמרי אחד מהשני לטובת lazy-loading.

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

כל מודול שנבנה כך מקבל קובץ JS משלו אחרי הרצה של הפרויקט (נראה את זה בסוף)

כאשר נפתח טרמינל בתוך הספריה של customers ונריץ פקודה ליצירה של רכיב חדש, באופן אוטומטי הוא יתווסף למודול של אותה ספריה.

תוצאה של יצירת רכיב חדש
ng g c customer-info

כך נראה הפרויקט לאחר build :

הקבצים לאחר build
build output

אפשר לראות ש-customers מודול קיבל קובץ JS משלו, קובץ זה יטען רק לאחר גלישה לניתוב הנכון.

הבעיה הכי גדולה כאן היא שרק כאשר גולשים לדף "לקוחות", המשתמש יאלץ להמתין בזמן שהקובץ נמשך ורץ בפעם הראשונה , כך שהחוויה לא חלקה לחלוטין…..

גם לזה יש פיתרון!

טעינה מקדימה של כל המודולים ב-lazy loading

imports: [
  RouterModule.forRoot(routes,
  { preloadingStrategy: PreloadAllModules })
],

עכשיו שנריץ את האתר, המודול הראשי יטען ולאחר שהדף יעלה, אנגולר ימשיך למשוך ולהריץ את כל שאר המודולים שנמצאים ב-lazy loading מאחורי הקלעים.

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

הייתי מאוד ממליץ לקרוא את הפוסט על עבודה בריבוי מודולים כדי להשלים את התמונה

פוסטים קשורים:

סופר מחלףריבוי מודולים באנגולר תמונת אווירה של מבוךהגדרה בסיסית לאנגולר ראוטינג תמונת אווירה של שלט שינויצורות שונות לקריאה של קומפוננטות אנגולר (angular selector types) מיניון מחזיק בננהangular input and output in the same variable
angular

אודות המחבר

עידן יצחקי להציג את כל הפוסטים של עידן יצחקי


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

אתם הולכים להיות מופתעים עד כמה HTML יכול להיות חכם ולבצע משהו כל כך מורכב, שאם אנחנו היינו רוצים ליצור

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד