I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تسرع تطبيقات Angular بذكاء باستخدام Deferrable Views؟

إزاي تسرع تطبيقات Angular بذكاء باستخدام Deferrable Views؟ أكيد مريت بالموقف ده: بتبني تطبيق Angular ضخم، وفيه صفحات مليانة مكونات (Components) تقيلة، زي جداول

إزاي تسرع تطبيقات Angular بذكاء باستخدام Deferrable Views؟
Reading Count: 3

إزاي تسرع تطبيقات Angular بذكاء باستخدام Deferrable Views؟

أكيد مريت بالموقف ده: بتبني تطبيق Angular ضخم، وفيه صفحات مليانة مكونات (Components) تقيلة، زي جداول بيانات ضخمة أو قسم تعليقات بياخد وقت كبير عشان يحمل. النتيجة؟ الصفحة بتبدأ ببطء، والـ Bundle Size بيضرب في العالي، وتجربة المستخدم (User Experience) بتدمر. زمان كنا بنستخدم الـ Lazy Loading للـ Routes، بس ده كان بيأجل الصفحة كاملة. طب إيه الحل لو عايز تأجل تحميل "جزء" بس من الصفحة؟ الحل هو الـ Deferrable Views اللي نزل في إصدارات أنجولار الجديدة.

يعني إيه 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.


Share

Related posts

Jun 20, 2026 • 1 min read
Reading Count: 2
إزاي تشغل تطبيقات فلاتر (Flutter) على الويب بسرعة خرافية باستخدام ويب اسمبلي (WebAssembly)؟

إزاي تشغل تطبيقات فلاتر (Flutter) على الويب بسرعة خرافية باستخدام ويب اسمبلي (WebAssembly)؟ لو أنت م...

Jun 17, 2026 • 1 min read
Reading Count: 13
إدارة الحالة (State Management) في أنجلر بدون وجع دماغ RxJS: دليل استخدام Angular Signals

إدارة الحالة (State Management) في أنجلر بدون وجع دماغ RxJS: دليل استخدام Angular Signals لو كنت مبر...

Jun 17, 2026 • 1 min read
Reading Count: 13
وداعاً لـ Zone.js: رحلة التحول نحو تطبيقات Angular بدون "زون" (Zoneless)

وداعاً لـ Zone.js: رحلة التحول نحو تطبيقات Angular بدون "زون" (Zoneless) لو بتشتغل بـ Angular بقالك...