กลับไปหน้าบทความ
#Next.js#Suspense#React#Streaming

ใช้ Suspense ใน Next.js แบ่ง UI และ Stream ส่วนที่พร้อมก่อน

วาง Suspense boundary รอบส่วนที่รอข้อมูลเพื่อให้ static content แสดงได้ทันที พร้อมออกแบบ loading fallback และหลีกเลี่ยง boundary ที่ละเอียดหรือกว้างเกินไป

13 กรกฎาคม 2569อ่านประมาณ 1 นาที

แชร์บทความ

ใช้ Suspense ใน Next.js แบ่ง UI และ Stream ส่วนที่พร้อมก่อน

ภาพรวม

Suspense ใน Next.js คือวิธีแบ่ง UI เป็นส่วนที่แสดงได้ทันที กับส่วนที่ต้องรอข้อมูลหรือ component โหลดเสร็จ ⏳

แทนที่จะให้ทั้งหน้ารอพร้อมกัน เราสามารถกำหนด fallback เช่น skeleton หรือ loading state ให้เฉพาะบางส่วน

ใน App Router Suspense ทำงานคู่กับ Server Components และ streaming ได้ดีมาก

ตัวอย่างเช่นหน้า dashboard แสดง layout และ navigation ก่อน แล้วค่อยโหลด chart หรือ table ที่ดึงข้อมูลช้า

ข้อดีคือ user เห็นโครงหน้าเร็วขึ้น และเข้าใจว่าเว็บกำลังโหลดส่วนไหนอยู่

แต่ fallback ควรมีขนาดใกล้เคียง content จริง เพื่อลด layout shift ตอนข้อมูลโหลดเสร็จ

Suspense ไม่ใช่แค่ loading สวย ๆ แต่เป็นเครื่องมือจัดลำดับการ render และประสบการณ์รอของ user

สรุปคือถ้าเว็บมีหลายส่วนที่รอข้อมูลไม่เท่ากัน Suspense ช่วยให้หน้าเว็บรู้สึกเร็วและนิ่งขึ้นมาก 🚀

Suspense Boundary ที่ดีควรครอบเฉพาะส่วนที่รอข้อมูล ไม่ใช่ครอบทั้งหน้าจน user เห็น loading ใหญ่ทั้งหน้าโดยไม่จำเป็น

ตัวอย่างเช่นให้ layout, title และ navigation แสดงก่อน แล้วให้ table หรือ chart ที่ดึงข้อมูลช้ารออยู่ใน boundary ของตัวเอง

fallback ควรสื่อสารชัดเจนว่ากำลังโหลดอะไร เช่น skeleton card หรือ placeholder ที่ขนาดใกล้เคียงของจริง

เมื่อใช้ร่วมกับ streaming Suspense จะช่วยให้ Next.js ส่ง UI เป็นส่วน ๆ และทำให้ประสบการณ์รอดูเป็นธรรมชาติกว่าเดิม

แนวทางนำไปใช้

  • นำแนวคิดจากโพสต์นี้ไปทดลองกับงานจริงของคุณ
  • แยกเป็นขั้นตอนเล็ก ๆ แล้วทำทีละส่วน
  • บันทึกผลลัพธ์และสิ่งที่เรียนรู้เพื่อต่อยอด

สรุป

วาง Suspense boundary รอบส่วนที่รอข้อมูลเพื่อให้ static content แสดงได้ทันที พร้อมออกแบบ loading fallback และหลีกเลี่ยง boundary ที่ละเอียดหรือกว้างเกินไป