الگوهای Event Delegation

الگوهای Event Delegation در جاوااسکریپت

در توسعه وب، مدیریت رویدادها (Events) یکی از مباحث کلیدی است. Event Delegation یک الگوی بهینه و کارآمد برای مدیریت رویدادهاست که به ویژه در پروژه‌های بزرگ با المان‌های پویا بسیار مفید واقع می‌شود.

الگوی Event Delegation به جای اختصاص رویداد به تک تک المان‌ها، از ویژگی حباب‌سازی رویدادها (Event Bubbling) در DOM استفاده می‌کند.

مزایای استفاده از Event Delegation

  • بهینه‌سازی عملکرد: کاهش تعداد Event Listenerها در صفحه
  • حافظه کمتر: مصرف حافظه پایین‌تر به ویژه در صفحات با المان‌های زیاد
  • پشتیبانی از المان‌های پویا: کارکرد صحیح حتی برای المان‌هایی که بعداً به DOM اضافه می‌شوند
  • کد تمیزتر: ساختار کد ساده‌تر و قابل نگهداری بهتر
روش سنتی Event Delegation
هر المان Listener جداگانه یک Listener برای والد
مصرف حافظه بالا مصرف حافظه بهینه
مشکل با المان‌های پویا کارایی یکسان برای المان‌های استاتیک و پویا

پیاده‌سازی عملی

برای درک بهتر این الگو، به مثال زیر توجه کنید:

document.getElementById('parent').addEventListener('click', function(e) {
    if(e.target.classList.contains('child')) {
        // عملیات مورد نظر برای المان فرزند
    }
});

در این مثال به جای اختصاص رویداد به هر .child، فقط یک رویداد به والد (#parent) اختصاص داده شده و با بررسی e.target تشخیص می‌دهیم که آیا المان کلیک شده از نوع مورد نظر ما هست یا خیر.


موارد استفاده رایج

  1. منوهای دارای زیرمنوهای پویا
  2. لیست‌های قابل مرتب‌سازی (Sortable Lists)
  3. جدول‌های با قابلیت ویرایش سطرها
  4. سیستم‌های کامنت با قابلیت پاسخ‌دهی
  5. هرگونه المان پویا که نیاز به تعامل کاربر دارد

برای مطالعه عمیق‌تر درباره رویدادها در جاوااسکریپت می‌توانید اینجا را بزنید و به آموزش جامع رویدادها دسترسی پیدا کنید.

نکته حرفه‌ای: در پروژه‌های بزرگ React یا Vue، اگر از Event Delegation به شکل صحیح استفاده کنید، می‌توانید تا 40% در مصرف حافظه صرفه‌جویی نمایید!