PlusMagi's Blog By Pitt Phunsanit Frontend,JavaScript,jQuery,Web การรอ DOM โหลดเสร็จด้วย DOMContentLoaded หรือ defer attribute แทนการใช้ $(document).ready()

การรอ DOM โหลดเสร็จด้วย DOMContentLoaded หรือ defer attribute แทนการใช้ $(document).ready()

ในโลกของการพัฒนาเว็บไซต์สมัยใหม่ การที่โค้ด JavaScript จะสามารถเข้าถึงและจัดการกับองค์ประกอบต่างๆ บนหน้าเว็บได้นั้น ไม่ใช่เรื่องง่ายเสมอไป เพราะกระบวนการโหลดของเบราว์เซอร์เป็นแบบอะซิงโครนัส (Asynchronous) ซึ่งหมายความว่าเมื่อสคริปต์เริ่มทำงาน อาจจะเร็วกว่าที่โครงสร้าง HTML ทั้งหมดจะถูกสร้างเสร็จสมบูรณ์ ทำให้เกิดปัญหาที่โค้ดพยายามค้นหา Element ที่ยังไม่มีอยู่จริงใน DOM


เจาะลึกรายละเอียดและประเด็นสำคัญ

ในอดีต นักพัฒนาหลายคนคุ้นเคยกับการใช้ `$(document).ready()` ของ jQuery ซึ่งเป็นวิธีที่สะดวกในการรับประกันว่าโค้ดจะทำงานก็ต่อเมื่อ DOM พร้อมแล้ว อย่างไรก็ตาม การพึ่งพาไลบรารีภายนอกเพียงเพื่อจัดการเรื่อง Timing ถือเป็นการเพิ่ม Overhead โดยไม่จำเป็น ในปัจจุบัน มาตรฐาน JavaScript (Vanilla JS) ได้มอบกลไกที่ทรงพลังกว่าและมีประสิทธิภาพมากกว่า นั่นคือ Event Listener ที่รอเหตุการณ์ `DOMContentLoaded`

การใช้ `addEventListener(‘DOMContentLoaded’, handler)` จะเป็นการดักจับเหตุการณ์ที่ DOM Tree ถูกสร้างเสร็จสมบูรณ์แล้ว โดยไม่จำเป็นต้องรอจนกว่าทรัพยากรทั้งหมด (เช่น รูปภาพ, เฟรมเวิร์กภายนอก) จะโหลดเสร็จสิ้น ซึ่งทำให้โค้ดทำงานได้เร็วขึ้นอย่างเห็นได้ชัด นอกจากนี้ สำหรับการจัดการสคริปต์ที่ควรจะถูกเลื่อนไปประมวลผลหลังจากการ Parse HTML เสร็จแล้ว การใช้แอตทริบิวต์ `defer` บนแท็ก `

Exit mobile version