Web Development·

การเพิ่มประสิทธิภาพ Performance สำหรับ Nuxt Applications

คู่มือสำหรับนักพัฒนาในการเพิ่มประสิทธิภาพ Nuxt applications ให้เร็วขึ้น — ครอบคลุม lazy loading, การเพิ่มประสิทธิภาพรูปภาพ, การวิเคราะห์ bundle, กลยุทธ์ caching และ Core Web Vitals

เว็บไซต์ที่เร็วคือความได้เปรียบทางการแข่งขัน Google ใช้ Core Web Vitals เป็นปัจจัยในการจัดอันดับ ผู้ใช้ทิ้งหน้าเว็บที่ช้า และอัตราการ conversion ลดลงอย่างเห็นได้ชัดทุกวินาทีที่เพิ่มขึ้นของเวลา load หาก Nuxt application ของคุณไม่ทำงานได้ดี คุณกำลังทำให้ traffic และรายได้หายไป

นี่คือกลยุทธ์การเพิ่มประสิทธิภาพที่เราใช้กับทุกโปรเจค Nuxt ที่เราสร้าง

วัดผลก่อนที่จะเพิ่มประสิทธิภาพ

ก่อนที่จะเปลี่ยนแปลงอะไร ให้สร้าง baseline ของคุณก่อน ใช้เครื่องมือเหล่านี้และบันทึกตัวเลข:

  • Google Lighthouse (ใน Chrome DevTools) — คะแนน performance โดยรวม, LCP, FID, CLS
  • WebPageTest.org — loading waterfall และ filmstrip ในโลกจริง
  • Google PageSpeed Insights — ข้อมูล field จากผู้ใช้จริงผ่าน Chrome UX Report
  • Nuxt DevTools — เวลาการ render component และขนาด payload

เพิ่มประสิทธิภาพ metrics ที่สำคัญที่สุด: Largest Contentful Paint (LCP), First Input Delay (FID) และ Cumulative Layout Shift (CLS)

การเพิ่มประสิทธิภาพรูปภาพ

รูปภาพมักเป็น assets ที่หนักที่สุดในหน้าเว็บ Nuxt Image ทำให้การเพิ่มประสิทธิภาพเป็นเรื่องง่าย

ใช้ Nuxt Image module:

<NuxtImg
  src="/hero-image.jpg"
  width="800"
  height="400"
  format="webp"
  loading="lazy"
  sizes="sm:100vw md:80vw lg:800px"
/>

Best practices:

  • ใช้ format="webp" สำหรับการบีบอัดแบบทันสมัย (เล็กกว่า JPEG 30–50%)
  • กำหนด width และ height ที่ชัดเจนเพื่อป้องกัน layout shifts (CLS)
  • ใช้ loading="lazy" สำหรับรูปภาพที่อยู่ below-the-fold
  • ใช้ attribute sizes สำหรับการโหลดรูปภาพแบบ responsive — อย่าส่งรูปภาพ desktop บนมือถือ
  • พิจารณาใช้ image CDN (Cloudinary, imgix) สำหรับการปรับขนาดแบบ dynamic

Lazy Loading Components

ไม่ใช่ทุก component ที่ต้องโหลดทันที Nuxt รองรับการ lazy-loading components ด้วยการตั้งชื่อแบบง่ายๆ:

<!-- Component นี้จะโหลดเมื่อมันเข้ามาใน viewport เท่านั้น -->
<LazyHeavyChart :data="chartData" />

เมื่อไหร่ควร lazy-load:

  • เนื้อหา below-the-fold (charts, maps, carousels)
  • Modals และ dialog content
  • Third-party widgets (chat widgets, social embeds)
  • Components ที่ขึ้นอยู่กับ libraries ที่หนัก

การเพิ่มประสิทธิภาพ Bundle

JavaScript bundles ที่ใหญ่เป็นสาเหตุที่พบบ่อยที่สุดของการโต้ตอบที่ช้า วิเคราะห์และลดขนาด bundle ของคุณ

วิเคราะห์ bundle ของคุณ:

npx nuxi analyze

นี่จะสร้าง visual treemap ที่แสดงว่ามีอะไรใน bundle ของคุณและน้ำหนักมาจากไหน

กลยุทธ์การลดขนาด:

  • Tree-shaking: ตรวจสอบให้แน่ใจว่าคุณ import เฉพาะสิ่งที่คุณใช้ (import { debounce } from 'lodash-es' ไม่ใช่ import _ from 'lodash')
  • Dynamic imports: โหลด libraries ที่หนักเฉพาะเมื่อจำเป็น
  • Audit dependencies: ลบ packages ที่ไม่ได้ใช้และแทนที่ libraries ที่หนักด้วยทางเลือกที่เบากว่า
  • Externalize large libraries: ถ้า library โหลดจาก CDN ให้ยกเว้นออกจาก bundle ของคุณ

การเพิ่มประสิทธิภาพ Server-Side Rendering

ถ้าคุณใช้ SSR เวลาตอบสนองของ server จะส่งผลโดยตรงต่อ LCP

กลยุทธ์:

  • Cache rendered pages โดยใช้ cache layer ของ Nuxt หรือ reverse proxy (Nginx, Cloudflare)
  • ใช้ route rules เพื่อ pre-render หน้าแบบคงที่ล่วงหน้าที่ไม่เปลี่ยนแปลงบ่อยๆ
  • เพิ่มประสิทธิภาพการดึงข้อมูล — หลีกเลี่ยงการเรียก API แบบต่อเนื่อง ใช้การดึงข้อมูลแบบขนานกับ Promise.all()
  • ลดการคำนวณฝั่ง server — ย้ายการประมวลผลที่หนักไปยัง background jobs หรือ edge functions

ตัวอย่าง Route rules:

// nuxt.config.ts
routeRules: {
  '/blog/**': { isr: 3600 }, // Revalidate โพสต์บล็อกทุกชั่วโมง
  '/about': { prerender: true }, // Static ตอน build time
  '/dashboard/**': { ssr: true }, // Render ฝั่ง server เสมอ
}

การเพิ่มประสิทธิภาพ Font

Custom fonts สามารถส่งผลกระทบอย่างมากต่อเวลา load และทำให้เกิด text flashing ที่มองเห็นได้ (FOUT/FOIT)

Best practices:

  • ใช้ font-display: swap เพื่อแสดง fallback text ทันที
  • Self-host fonts แทนการโหลดจาก Google Fonts (ลด DNS lookup และ connection overhead)
  • Subset fonts เพื่อรวมเฉพาะตัวอักษรที่คุณต้องการ
  • Preload critical fonts:
<link rel="preload" href="/fonts/PublicSans.woff2" as="font" type="font/woff2" crossorigin>

กลยุทธ์ Caching

Caching ที่มีประสิทธิภาพจะลด server load และปรับปรุง performance การเข้าชมซ้ำ

Multi-layer caching:

  1. CDN edge caching — static assets และ pre-rendered pages ถูก cache ทั่วโลก
  2. Service worker — cache critical resources สำหรับการรองรับ offline และการโหลดทันที
  3. API response caching — cache การตอบสนองจาก external API เพื่อลด latency
  4. Browser caching — ตั้งค่า Cache-Control headers ที่เหมาะสมสำหรับ static assets

การจัดการ Third-Party Script

Analytics, chat widgets และ marketing pixels มักเป็นตัวทำลาย performance ที่ใหญ่ที่สุด — และยากที่สุดในการเพิ่มประสิทธิภาพเพราะคุณไม่สามารถควบคุมพวกมันได้

กลยุทธ์:

  • โหลด third-party scripts ด้วย defer หรือ async
  • ใช้ requestIdleCallback หรือ setTimeout เพื่อหน่วงเวลา scripts ที่ไม่สำคัญ
  • พิจารณาโหลด chat widgets เฉพาะในหน้าเฉพาะ (หน้าติดต่อ ไม่ใช่ทั้งเว็บไซต์)
  • ใช้ Partytown เพื่อรัน third-party scripts ใน web worker

การตรวจสอบใน Production

การเพิ่มประสิทธิภาพ performance ไม่ใช่งานที่ทำครั้งเดียว ตรวจสอบอย่างต่อเนื่อง:

  • Google Search Console — รายงาน Core Web Vitals จากผู้ใช้จริง
  • Real User Monitoring (RUM) — ติดตาม performance จริงที่ผู้เข้าชมประสบ
  • Lighthouse CI — ทำการตรวจสอบ performance ทุกครั้งที่ deploy
  • Error tracking — จับ runtime errors ที่ส่งผลต่อประสบการณ์ผู้ใช้

Quick Wins Checklist

ถ้าคุณต้องการการปรับปรุงทันที เริ่มที่นี่:

  • เปิดใช้งาน Nuxt Image และแปลงรูปภาพเป็น WebP
  • เพิ่ม loading="lazy" ให้กับรูปภาพ below-the-fold
  • ตั้งค่าขนาดที่ชัดเจนในรูปภาพและ videos ทั้งหมด
  • รัน npx nuxi analyze และลบ dependencies ที่ไม่ได้ใช้
  • เปิดใช้งาน gzip/brotli compression บน server ของคุณ
  • เพิ่ม Cache-Control headers สำหรับ static assets
  • Defer third-party scripts ที่ไม่สำคัญ
  • Preload critical fonts และ CSS

ต้องการการตรวจสอบ performance แบบมืออาชีพสำหรับ Nuxt application ของคุณ? ติดต่อเรา — เราจะระบุว่าอะไรทำให้คุณช้าลงและแก้ไขมัน