
چه چیزی DOM است و چرا به آن نیاز داریم؟
«همهجا صحبت از DOM است... اما واقعاً DOM چیست؟»
DOM (مخفف *Document Object Model*) یا مدل شیءگرای سند، نمایی ساختاری از یک صفحه وب به شکل یک درخت است. در این مدل، هر تگ HTML به یک گره تبدیل میشود—یا شاخه، یا برگ. این ساختار به JavaScript اجازه میدهد تا در میان این درخت حرکت کرده، ویژگیهای گرهها را بخواند و ساختار یا محتوای آنها را در لحظه تغییر دهد.
### چرا به DOM نیاز داریم؟
پویایی محتوا
* امکان تغییر متن، سبکها و ساختار صفحه بدون نیاز به بارگذاری مجدد
* پیادهسازی برنامههای تکصفحهای (*SPA*) و رابطهای فوقالعاده سریع
تعاملپذیری
* واکنش به کلیک، حرکت ماوس، یا ورود اطلاعات از صفحهکلید
* ساخت منوهای کشویی، پنجرههای مودال، اسلایدرها و سایر قابلیتهایی که به یک وبسایت «جان» میبخشند
ارتباط با JavaScript
* DOM پلی است میان HTML و CSS ایستا با منطق پویا در JavaScript
* این امکان را به اسکریپتها میدهد که عناصر را جابهجا کرده، حذف یا اضافه کنند و به آنها انیمیشن بدهند
### نکات مهم:
هنگامی که شروع به اعمال تغییرات متعدد در DOM میکنید، به خاطر داشته باشید که هر تغییر میتواند پرهزینه باشد. افزودن یا حذف عناصر، تغییر در سبکها یا بازآرایی ساختار صفحه، باعث رخ دادن «بازمحاسبه» (*reflow*) و «بازنقاشی» (*repaint*) میشود—یعنی مرورگر مجبور است دوباره ابعاد و موقعیت عناصر را محاسبه کرده و صفحه را مجدداً ترسیم کند. اگر این تغییرات زیاد و پراکنده باشند، ممکن است باعث کند شدن رابط کاربری شود.
برای جلوگیری از این مشکل، سعی کنید تغییرات را دستهبندی و یکجا اعمال کنید؛ به عنوان مثال، ابتدا گرههای جدید را در یک *DocumentFragment* قرار دهید و سپس آن را بهصورت یکجا به DOM اضافه کنید، بهجای آنکه هر گره را جداگانه درج نمایید.
نکتهای دیگر، مسئله امنیت است. استفادهی مستقیم از innerHTML برای درج کد HTML، میتواند زمینهساز حملات XSS شود. اگر کدی مخرب وارد شود، ممکن است در صفحه شما اجرا گردد. برای جلوگیری از این خطر، بهجای innerHTML از textContent برای درج متن استفاده کنید و برای ایجاد عناصر جدید، از document.createElement و روشهایی مانند appendChild یا insertBefore بهره بگیرید.
### جمعبندی:
DOM پلی است میان ساختار ایستا و رابط پویا؛ همان چیزی که به صفحهها امکان واکنشپذیری، تعامل و تحول میدهد. مدیریت درست DOM، شرط اصلی ایجاد برنامههای وب سریع، پاسخگو و انعطافپذیر است.