Back to notes
mastery-frontend-nextjs
Featured

Next.js Performance Mastery: สกัดไขมันและกำจัดขยะใน Bundle ของคุณ

เจาะลึกกลยุทธ์การรีดประสิทธิภาพ Next.js ขั้นสูง ตั้งแต่การกำจัด Data Waterfalls ไปจนถึงเทคนิคลดขนาด Bundle Size ที่จะทำให้เว็บของคุณเร็วกว่าคู่แข่ง 10 เท่า

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: "แอปเทพ แต่โหลดช้า... ลูกค้าก็หนี"

ลองนึกถึงวันที่คุณสร้าง Dashboard สุดหรูหราที่มีทุุกฟีเจอร์ที่ลูกค้าต้องการ แต่ผู้ใช้ต้องเจอหน้าขาวโพลนนาน 8 วินาที:

HLJS TSX
// ❌ Naive Approach: ยิงข้อมูลแบบต่อคิว (Waterfall)
const user = await fetchUser(); // ⏳ รอ 2 วิ
const posts = await fetchPosts(user.id); // ⏳ รออีก 2 วิ
const analytics = await fetchAnalytics(); // ⏳ รออีก 3 วิ
// 🌋 พัง! กว่าคอมโพเนนต์จะเริ่มวาดหน้าจอ (Render) ผู้ใช้ต้องรอรวม 7 วินาที
# ทั้งที่ analytics กับ user ข้อมูลไม่ได้เกี่ยวข้องกันเลย นี่คือการ "ฆ่าตัวตาย" ทางเทคนิคครับ

ปัญหา: ประสิทธิภาพไม่ใช่แค่เรื่องของความเร็วอินเทอร์เน็ต แต่อยู่ที่ "ลำดับความสำคัญ" (Prioritization) การโหลด JavaScript ที่ใหญ่เกินไปหรือการรอข้อมูลแบบไร้ระเบียบ จะทำให้คะแนน Core Web Vitals (LCP, INP) ของคุณร่วงกราว และทำลายความเชื่อถือของผู้ใช้งานทันทีครับ


💡 2. Real-Life Analogy: การสั่งอาหารในร้านอาหาร

  • Data Waterfall: เหมือนคุณสั่งอาหาร 3 อย่าง แต่พนักงานเสิร์ฟเดินไปบอกเชฟทีละจาน: สั่งสลัดเสร็จ รอสลัดทำเสร็จเอามาเสิร์ฟ ค่อยเดินไปสั่งสเต็ก... (เสียเวลาเดินไปมามหาศาล)
  • Promise.all: เหมือนคุณส่งโพยรายการอาหาร 3 อย่างให้เชฟพร้อมกัน ทุุกจานถูกทำขนานกันไป แล้วยกออกมาเสิร์ฟพร้อมกัน (ใช้เวลาน้อยลงเท่ากับจานที่ทำยากที่สุดจานเดียว)
  • Dynamic Import: เหมือน "โต๊ะเสริม". คุณไม่ต้องจัดโต๊ะยาวเผื่อคน 20 คนตั้งแต่นาทีแรก คุณแค่เตรียมโต๊ะหลักไว้ แล้วพอแขกเริ่มเดินมาเยอะๆ ค่อยวิ่งไปหยิบโต๊ะพับมาต่อเพิ่ม (ลดโหลดในตอนแรก)

🚀 3. Execution Journey: มหากาพย์การดีท็อกซ์ระบบ

Senior จะมองหาทุุกจุดที่สามารถ "รันขนาน" หรือ "เลื่อนเวลา" ออกไปได้

🛠 Step-by-step:

  1. The Parallel Guard: ใช้ Promise.all ยิงข้อมูลที่ไม่เกี่ยวข้องกันพร้อมกันเสมอ
  2. The Defer Strategy: ใช้ Suspense ครอบส่วนที่โหลดช้า เพื่อให้โครงสร้างหลัก (Shell) ของหน้าเว็บโผล่มาก่อน
  3. The Bundle Surgeon: ใช้ @next/bundle-analyzer เพื่อตัดแต่ง Library ที่อ้วนเกินไป (เช่น เผลอ Import lodash มาทุุกตัว)
  4. The Edge Lazy Loading: ใช้ next/dynamic สำหรับคอมโพเนนต์ที่อยู่ใต้ "เส้นพับ" (Below the fold) หรือคอมโพเนนต์ที่ใช้งานน้อย
HLJS TSX
// ✅ Best Practice: การยิงข้อมูลแบบโปร
async function Dashboard() {
  // 🛠 ยิงพร้อมกัน 2 ตัวที่ไม่ได้เกี่ยวข้องกัน (Parallel)
  const [userData, staticConfig] = await Promise.all([
    fetchUserData(),
    fetchStaticConfig(),
  ]);

  return (
    <div>
      <Header user={userData} />
      {/* 🛠 ส่วนที่ช้าที่สุด ให้แยกไปโหลดทีหลังผ่าน Suspense */}
      <Suspense fallback={<ChartSkeleton />}>
        <HeavyAnalyticsChart />
      </Suspense>
    </div>
  );
}

🪤 4. The Junior Trap: โรค "Barrel File บวม"

จูเนียร์มักจะชอบรวมทุุกอย่างไว้ในไฟล์ index.ts (Barrel File) เพื่อให้ Import ง่าย:

HLJS TSX
// ❌ Junior Trap: Import จาก index ที่มีของอยู่ข้างในเป็นพัน
import { SimpleIcon } from '@/components/icons';
// 🌋 พัง! แม้คุณจะใช้แค่ Icon เดียว แต่ Webpack/Turbopack อาจจะเผลอโหลด
# Icon ทั้งหมดอีก 500 ตัวในโฟลเดอร์นั้นเข้ามาใน Bundle ของหน้าเว็บนั้นด้วย
# ทำให้หน้าเว็บโหลดช้าโดยที่คุณไม่รู้ตัวเลย

ระวัง: ความสะดวกในการเขียน คือศัตรูของความเร็วในการโหลด ✅ การแก้ไข: จง Import ตรงจากไฟล์ลูก (เช่น @/components/icons/SimpleIcon) หรือใช้ Next.js 14+ ที่มีฟีเจอร์ optimizePackageImports ครับ


⚖️ 5. The Why Matrix: Sequential vs Parallel vs Streaming

หัวข้อSequential (แย่)Parallel (ดี)Streaming (เทพ)
ความรู้สึกของ Userอืด (หน้าขาวนาน)เร็ว (มาทีเดียวพึ่่บ!)🚀 ลื่นไหล (ค่อยๆ โผล่)
ความยากในการเขียนง่ายที่สุดปานกลาง🐢 ยากกว่า (ต้องจัดการ Suspense)
Network Costปานกลาง⚡⚡ สูง (ยิงพร้อมกัน)⚡⚡ ปานกลาง
เหมาะกับหน้าเว็บที่ไม่สำคัญข้อมูลที่ต้องใช้พร้อมกันหน้า Dashboard ข้อมูลเยอะ

🎓 6. Senior Mindset Summary

การเป็น Senior คือการมองว่า "เราไม่ได้เพิ่มความเร็วด้วยการลดฟีเจอร์ แต่เราเพิ่มความเร็วด้วยการ 'หลอกล่อ' และจัดลำดับความสำคัญของข้อมูลให้ฉลาดที่สุด". โค้ดที่เร็วจริงคือโค้ดที่คุณเขียนให้มัน "ทำเฉพาะภารกิจที่สำคัญที่สุดในวินาทีนั้น" เท่านั้นครับ!

Share this note

Related notes

View all notes
mastery-frontend-nextjs
Advanced

Next.js Security & Performance: เจาะลึกความลับหลังม่าน Server

อย่าให้คำว่า 'use server' มาหลอกคุณ! เจาะลึกความปลอดภัยของ Server Actions และเทคนิคการดึงข้อมูลแบบขนานที่แยกคนเขียนเว็บเก่งๆ ออกจากระดับมือสมัครเล่น

January 30, 20262 min read
mastery-frontend-nextjs
Intermediate

Next.js App Router Mastery: ปฏิวัติการเขียนเว็บสไตล์ Full-stack

เจาะลึก Next.js App Router ตั้งแต่หัวใจของ Server Components ไปจนถึงระบบ Data Fetching ยุคใหม่ที่จะทำให้เว็บของคุณเร็วและเทพกว่าเดิมหลายเท่า

January 30, 20262 min read
mastery-frontend-nextjs
Advanced

Next.js Best Practices: เซ็ตอัพให้เป๊ะก่อนขึ้น Production

เจาะลึกการรัน Next.js อย่างมือโปร ตั้งแต่การจัดการ Environment Variables แบบ Type-safe ไปจนถึงการปรับแต่ง Image Optimization และระบบความปลอดภัยระดับสูง

January 30, 20262 min read

© 2026 My Notes by Seereen