استدعاء ملفات JavaScript عند الحاجة فقط لتحسين أداء موقعك

يوليو 24, 2025

🧠 يعني إيه Dynamic Import؟

الديناميـك إمبورت ببساطة هو إنك تحمّل ملف أو موديول JavaScript "وقت الحاجة بس" مش من أول الصفحة. الميزة دي بتقلل حجم الباندل الأساسي، وبتسرّع تحميل الصفحة بشكل كبير، وبتخلي تجربة المستخدم أكثر سلاسة.

💡 مثال عملي: تحميل موديول جرافيك عند الضغط

هنفترض إن عندنا زرار "تحميل رسم بياني"، والوظيفة دي مش دايمًا المستخدم هيستخدمها، فليه نحملها من الأول؟ نحمّلها وقت ما يضغط:

<button class="btn btn-outline-dark" id="loadChart">تحميل الرسم البياني</button>

<script>
  document.getElementById("loadChart").addEventListener("click", async () => {
    const module = await import("./charts.js");
    const {{ showChart }} = module;

    if (typeof showChart === "function") {
      showChart(); // دي الدالة المسؤولة عن عرض الرسم البياني
    } else {
      console.error("showChart مش موجودة أو مش دالة في charts.js");
    }
  });
</script>

ملحوظة: لازم ملف charts.js يكون فيه الدالة متصدّرة كده:

// charts.js
export function showChart() {
  alert("الرسم البياني تم تحميله بنجاح!");
}

📨 مثال متقدم: تحميل موديول معالجة فورم عند الإرسال

مش لازم تحمّل كود معالجة الفورم إلا لما المستخدم يبعت الفورم فعلًا، وده مثال عملي:

<form id="contactForm">
  <input type="text" name="name" placeholder="اسمك" required />
  <button type="submit">إرسال</button>
</form>

<script>
  document.getElementById("contactForm").addEventListener("submit", async (e) => {
    e.preventDefault();
    const module = await import("./formHandler.js");
    const {{ processForm }} = module;

    if (typeof processForm === "function") {
      processForm(new FormData(e.target));
    } else {
      console.error("processForm مش موجودة في formHandler.js");
    }
  });
</script>

والموديول يكون كده:

// formHandler.js
export function processForm(formData) {
  const name = formData.get("name");
  alert("تم استلام البيانات: " + name);
}

⚡ طب ليه ده مهم؟

  • ⏱️ بيقلل وقت تحميل الصفحة الأولى بشكل كبير.
  • 📦 بيوفر في حجم الجافاسكريبت المحمّل، خصوصًا في الموبايل.
  • 📈 بيرفع تقييم موقعك في أدوات قياس الأداء زي Google Lighthouse وCore Web Vitals.
  • 🧠 بيساعد في تقسيم الكود بشكل ذكي وسهل للصيانة.

المدونة

مقارنة بين Scopes + Traits × UseEloquentBuilder في Laravel

يوليو 13, 2025

في Laravel، بنحتاج دايمًا نكتب استعلامات شبه بعض في أكتر من مكان. Laravel بتوفر طريقتين أساسيين نقدر نستخدمهم علشان نرتّب الاستعلامات دي: Scopes + Tra...

البرمجة الكائنية (OOP) – المفاهيم الأساسية

أغسطس 09, 2025

البرمجة الكائنية التوجه (Object Oriented Programming - OOP) هي أسلوب حديث في تطوير البرمجيات يُقسّم التطبيق إلى وحدات تسمى كائنات (Objects) تتفاعل م...

لارافيل 12: كل جديد من 12.0 لـ 12.19 – دليل شامل

يوليو 20, 2025

🔧 1. لارافيل&nbsp;12.0 &ndash; ستارتر كيتس وتعديلات أساسية إصدار 12.0 جاب Starter Kits جاهزة للـ React، Vue، Livewire، وكمان دمج مع WorkOS AuthKit،...

أهم تحديثات Laravel و PHP لكتابة كود أنظف وأسرع

أغسطس 17, 2025

Laravel Global Scopes: Automatic Query Filtering Eloquent الأهمية: فرض فلترة ثابتة على جميع استعلامات الموديل (مثل Soft Deletes) دون تكرا...

استخدام useCallback في React: الفوائد، القيود، والممارسات المثالية

يوليو 31, 2025

Hook useCallback في React يُستخدم لإنشاء نسخة ثابتة من دالة (callback) بحيث لا يُعاد إنشاؤها إلا إذا تغيرت الـ dependencies المحددة. الهدف الأساسي م...

حلل مشروع Laravel بـ Introspect

يوليو 01, 2025

حلل كود Laravel باستخدام Laravel Introspect لو بتعمل Refactor كبير أو بتبني أدوات Dev‪، Laravel Introspect بيسمحلك تستعلم عن الكود: فيوز، مودلز، رو...