إزاي تسرع تطبيقات Angular بذكاء باستخدام Deferrable Views؟
أكيد مريت بالموقف ده: بتبني تطبيق Angular ضخم، وفيه صفحات مليانة مكونات (Components) تقيلة، زي جداول بيانات ضخمة أو قسم تعليقات بياخد وقت كبير عشان يحمل. النتيجة؟ الصفحة بتبدأ ببطء، والـ Bundle Size بيضرب في العالي، وتجربة المستخدم (User Experience) بتدمر. زمان كنا بنستخدم الـ Lazy Loading للـ Routes، بس ده كان بيأجل الصفحة كاملة. طب إيه الحل لو عايز تأجل تحميل "جزء" بس من الصفحة؟ الحل هو الـ Deferrable Views اللي نزل في إصدارات أنجولار الجديدة.
Table of contents [Show]
يعني إيه Deferrable Views؟
مفهوم الـ Deferrable Views أو الـ @defer block هو طريقة ذكية جداً بتخليك تقول لأنجولار: "يا باشا، ما تحملش المكون ده غير لما المستخدم يحتاجه فعلاً". ده بيساعد جداً في تحسين أداء التطبيق (Performance Optimization) وتقليل وقت التحميل الأولي (Initial Load Time). بدل ما المتصفح يضطر يحمل الـ JavaScript بتاع الكومنتات وهو أصلاً لسه ما وصلش ليها، الـ @defer بيخلينا نأجل ده لحد ما المستخدم يعمل "Scroll" للمكان ده.
إزاي نستخدم @defer في الكود؟
الطريقة سهلة ومباشرة، وبتاخد أكواد HTML بسيطة بدل الـ Complex Logic القديم. بص معايا على المثال ده:
@defer (on viewport) {
<app-comments-list></app-comments-list>
} @placeholder {
<p>جاري تحميل التعليقات...</p>
} @loading {
<p>تحميل...</p>
} @error {
<p>حصلت مشكلة أثناء تحميل التعليقات</p>
}
هنا بنستخدم الـ (on viewport)، يعني المكون ده مش هيتحمل خالص غير لما الـ Component يظهر فعلاً قدام عين المستخدم على الشاشة. أما الـ @placeholder فهو اللي بيظهر قبل ما التحميل يبدأ، والـ @loading بيظهر وقت التحميل نفسه، والـ @error لو لا قدر الله حصلت مشكلة في الـ Network.
خيارات تانية للتحكم في التحميل (Trigger Conditions)
الموضوع مش بس (viewport)، أنجولار بيديك مرونة كبيرة جداً في شروط التحميل، منها:
- on timer(5s): بيحمل المكون بعد 5 ثواني من فتح الصفحة.
- on interaction: بيحمل المكون لما المستخدم يضغط عليه أو يعمل hover.
- on idle: بيحمل لما المتصفح يكون فاضي ومفيش عمليات تقيلة شغالة.
- when condition: تقدر تربطه بمتغير (Boolean Variable) عندك في الـ TS ملف.
ليه لازم تستخدم الـ @defer في مشاريعك الجاية؟
استخدامك للـ Deferrable Views مش بس بيخلي الكود شكله أشيك، ده بيحول أداء التطبيق 180 درجة. الـ Bundle Size بيقل، وده معناه أن صفحتك هتفتح أسرع على الموبايلات الضعيفة أو شبكات الإنترنت البطيئة، وده بيزود الـ SEO Score بتاعك بشكل غير مباشر لأن جوجل بيحب المواقع السريعة.
نصيحة من أخ لمبرمج
التقنيات دي زي الـ @defer هي اللي بتفرق بين المبرمج اللي بيعرف يكتب كود والمبرمج اللي بيبني "برودكت" حقيقي. نصيحتي ليك: ما تبهرش نفسك بالـ Features الجديدة وبس، حاول دايماً تفكر في تجربة المستخدم (UX). جرب تستخدم الـ @defer في صفحات الـ Dashboard أو أي صفحة فيها Layout معقد، وشوف الفرق بنفسك في الـ Network Tab في الـ Chrome DevTools. التعلم المستمر هو سرك المهني، خليك دايماً متابع التحديثات الجديدة في Angular.