Skip to main content
Case Studies

Lighthouse Performance Audit — เมื่อเว็บไซต์ของเราได้คะแนน 60 และ Redirect ใช้เวลา 12 วินาที

เมื่อรัน Lighthouse บนเว็บไซต์ Enersys แล้วพบว่าได้คะแนน Performance เพียง 60/100 — LCP 9.1 วินาที เกิดจาก redirect chain ที่ซ่อนอยู่ใช้เวลาไป 12.4 วินาที นี่คือบันทึกการวิเคราะห์และแผนแก้ไข

10 มี.ค. 20267 นาที
Web PerformanceLighthouseCore Web VitalsDevOps

"ทำไมเว็บของเราได้แค่ 60?"

มีคำถามหนึ่งที่ไม่ควรถามทีมงานตอนก่อนเลิกงานวันศุกร์ นั่นคือ "ลองรัน Lighthouse บนเว็บเราหน่อยได้ไหม?"

เพราะเมื่อผลออกมา — ตัวเลขที่เห็นทำให้ต้องนั่งต่ออีกสักพัก

Performance Score: 60/100

ไม่ใช่คะแนนที่น่าภาคภูมิใจ โดยเฉพาะเมื่อเว็บไซต์นี้สร้างด้วย framework ชั้นนำ, static export, deploy บน CDN และผ่านการ optimize มาพอสมควร แต่นั่นคือจุดที่น่าสนใจ — ถ้าทุกอย่างดูดีบนกระดาษ แต่ Lighthouse บอกว่า 60 แสดงว่ามีบางอย่างซ่อนอยู่ที่เรายังไม่รู้

บทความนี้คือบันทึกการขุดหาต้นตอ วิเคราะห์ root cause และวางแผนแก้ไข — เขียนอย่างตรงไปตรงมา ไม่ปิดบังตัวเลขที่น่าเขินอาย เพราะเราเชื่อว่าการแชร์บทเรียนดีกว่าการซ่อนปัญหา


Filmstrip: เว็บโหลดยังไงในสายตา Lighthouse

ก่อนดูตัวเลข มาดูก่อนว่า Lighthouse "เห็น" อะไรระหว่างที่เว็บโหลด:

Lighthouse Filmstrip — เริ่มต้น blank screen ขาวสนิท Lighthouse Filmstrip — เนื้อหาเริ่มปรากฏ Lighthouse Final Screenshot — สถานะสุดท้ายหลังโหลดเสร็จ

สังเกตว่า filmstrip มีแค่ 3 สถานะ — จอขาว, เริ่มเห็นเนื้อหา, แล้วก็โหลดเสร็จ ไม่มี intermediate state ระหว่างกลางเลย เพราะช่วง 12 วินาทีแรกที่เสียไปกับ redirect chain นั้น browser ไม่ได้ render อะไรเลยแม้แต่ pixel เดียว — นี่คือหลักฐานที่ชัดเจนว่าปัญหาไม่ได้อยู่ที่ rendering แต่อยู่ที่ network-level redirect


วิเคราะห์ Score แต่ละตัว

Metric ค่าที่วัดได้ Score ระดับ
Performance Score 60 ต้องปรับปรุง
First Contentful Paint (FCP) 1.6s 0.95 ดีมาก
Largest Contentful Paint (LCP) 9.1s 0.01 แย่มาก
Total Blocking Time (TBT) 570ms 0.52 ต้องปรับปรุง
Cumulative Layout Shift (CLS) 0 1.0 สมบูรณ์แบบ
Speed Index 2.8s 0.96 ดีมาก
Time to Interactive (TTI) 9.6s 0.29 แย่

ตัวเลขเหล่านี้บอกเรื่องราวที่น่าสนใจ — FCP และ Speed Index ดีมาก หมายความว่าเนื้อหาเริ่มแสดงผลเร็ว แต่ LCP แย่มากผิดปกติ สิ่งที่ทำให้ performance score พังทั้งหมดคือ LCP เพียงตัวเดียว

ความขัดแย้งระหว่าง FCP ดีแต่ LCP แย่ คือสัญญาณคลาสสิกของปัญหาที่เกิดขึ้น ก่อน ที่ browser จะเริ่ม render — และนั่นคือเส้นทางนำไปสู่ root cause


Root Cause #1: Redirect Chain 12.4 วินาที — ตัวการตัวจริง

นี่คือ ตัวการหลัก ที่ทำลาย performance ทั้งหมด:

Redirect Chain:
  enersys.co.th/             →  enersys.co.th/th
  เวลาที่เสียไป: 12,400ms (12.4 วินาที!)

ใช่ ไม่ใช่ 1.2 วินาที — สิบสองจุดสี่วินาที

ทำไมถึงเกิด?

เว็บไซต์รองรับหลายภาษา โดยค่าเริ่มต้นคือภาษาไทย — เมื่อผู้ใช้เข้า / ระบบจะ redirect ไปที่ /th โดยอัตโนมัติ

ในกรณีปกติ redirect ใช้เวลาไม่กี่ millisecond แต่ปัญหาอยู่ที่ Lighthouse วัด LCP จาก URL ต้นทาง และนับเวลาตั้งแต่ navigation เริ่มต้นจนกว่า largest element จะ render — รวมเวลาที่เสียไปกับ redirect ทั้งหมด

ตัวเลข 12.4 วินาทีนั้นผิดปกติมาก redirect ปกติไม่ควรใช้เวลานานขนาดนี้ ซึ่งอาจเกิดจากหลายสาเหตุ:

  1. Cold start overhead — server ที่ handle redirect อาจมี startup latency สูง
  2. DNS / connection overhead — การ redirect ทำให้ browser ต้องสร้าง connection ใหม่
  3. Redirect ไม่ถูก cache — ทำให้ทุก request ต้องผ่าน origin server

ผลกระทบต่อ Score

LCP มีน้ำหนักสูงที่สุดใน Performance Score (~25%) และค่า 9.1s ให้ score เพียง 0.01 จากสูงสุด 1.0 — metric ตัวเดียวทำลาย performance score จาก 95+ ลงมาเหลือ 60


Root Cause #2: Unused JavaScript — 65KB ที่ไม่ได้ใช้

Lighthouse ตรวจพบ unused JavaScript ใน bundle กลางขนาดประมาณ 65KB คิดเป็น potential savings ราว 300ms

สิ่งที่มักซ่อนอยู่ใน bundle หลักโดยไม่รู้ตัว:

  • Library ที่ import ทั้ง package แทนที่จะ import เฉพาะที่ใช้
  • Component ที่โหลดตั้งแต่แรกแต่ผู้ใช้ยังไม่เห็น
  • Code ที่ถูก compile ออกมาเพื่อรองรับ browser เก่าที่ไม่จำเป็น

Root Cause #3: Image Optimization — ยังส่ง PNG อยู่

Lighthouse ระบุรูปภาพหลายไฟล์ที่ยังเป็น PNG ทั้ง ๆ ที่แปลงเป็น format ที่เบากว่าได้ — potential savings รวม ~76KB

เว็บไซต์ใช้ static export ซึ่งไม่มี automatic image optimization ทำให้ต้องจัดการ format เองทั้งหมด


Main Thread Work: 3.1 วินาที

Lighthouse รายงาน main thread work รวม 3.1 วินาที แบ่งเป็น:

งานที่ทำ เวลา
Style & Layout calculation 1.1s
Other 0.9s
Script Evaluation 0.8s
Parse HTML & CSS 0.3s

TBT 570ms บอกว่า main thread ถูก block จาก JavaScript รวม 570ms — เกิน threshold "needs improvement" (200ms) แต่ยังไม่ถึง "poor" (600ms)


สิ่งที่ทำได้ดี — ไม่ใช่แค่ปัญหา

เพื่อความยุติธรรม Lighthouse ก็ให้คะแนนเต็มหลายจุด:

Server Response Time: สมบูรณ์แบบ (score 1.0) — server ตอบสนองเร็ว infrastructure ไม่ใช่ปัญหา

CLS: 0 — สมบูรณ์แบบ — ไม่มี layout shift เลย ผู้ใช้ไม่เจอปัญหาปุ่มกระโดดหนี

FCP 1.6s — ดีมาก — เนื้อหาแรกปรากฏเร็ว ไม่มี render-blocking resources

Speed Index 2.8s — ดีมาก — หน้าเว็บดูเหมือนโหลดเสร็จเร็ว (เมื่อเข้าโดยตรง)

สรุป: ถ้าเข้าหน้าเว็บโดยตรง (ไม่ผ่าน redirect) performance ดีมาก ปัญหาใหญ่ที่สุดซ่อนอยู่ใน redirect chain เดียว


แผนแก้ไข — เรียงตามความสำคัญ

Priority ปัญหา แนวทาง Expected Impact
1 Redirect chain 12.4s จัดการ redirect ที่ infrastructure layer LCP ลด 5+ วินาที
2 Unused JS 65KB Code splitting, lazy load below-fold TBT ลด 200-300ms
3 PNG images แปลงเป็น modern format ลด 76KB+
4 Style/Layout cost 1.1s Audit CSS usage Main thread ลด

Target หลังแก้ไข:

Metric ปัจจุบัน Target
Performance Score 60 85+
LCP 9.1s < 2.5s
TBT 570ms < 200ms
TTI 9.6s < 5s

บทเรียน: ทำไมต้องวัด Performance สม่ำเสมอ

ปัญหา redirect chain 12.4 วินาทีนี้น่าจะมีมาสักพักแล้ว แต่เราไม่รู้ เพราะไม่ได้วัด เมื่อไม่ได้วัด ก็ไม่รู้ว่ามีปัญหา

Core Web Vitals ที่ Google ใช้ใน Search ranking ตั้งแต่ปี 2021 คือ LCP, FID/INP, และ CLS — ถ้า LCP แย่ ไม่ใช่แค่ผู้ใช้ที่รู้สึก แต่ search ranking ก็ได้รับผลกระทบด้วย

สิ่งที่ทีมควรทำเป็นประจำ:

  1. รัน performance audit ใน CI/CD — ทุกครั้งที่ merge ควรมีรายงาน performance เปรียบเทียบ
  2. ตั้ง threshold alerts — กำหนดว่า LCP ต้องไม่เกิน 3 วินาที ถ้าเกินให้ build fail
  3. Monitor Real User Data — Lab test อย่างเดียวไม่พอ ต้องดูตัวเลขจาก user จริงด้วย
  4. ทดสอบ URL ที่ user จริง ๆ เข้า — รวม URL ที่มี redirect ด้วย ไม่ใช่แค่ URL ปลายทาง

บทสรุป

คะแนน 60 ที่ Lighthouse ให้มาไม่ใช่เรื่องน่าอาย แต่เป็นโอกาสที่ดีในการเรียนรู้:

  • ปัญหาใหญ่ที่สุดไม่ได้อยู่ใน code — แต่อยู่ใน infrastructure configuration
  • Metric เดียวที่แย่มากทำลาย overall score ไปมากกว่าครึ่ง
  • CLS เป็น 0 สมบูรณ์แบบ — งานที่ทีมทำมาได้ผล
  • ถ้าไม่ได้วัดวันนี้ เราจะยังไม่รู้เรื่องนี้อยู่

ที่ Enersys เราเชื่อว่า transparency ต่อตัวเองสำคัญกว่า image ที่ดูดี — การยอมรับว่าเว็บตัวเองได้คะแนน 60 และแชร์ root cause ออกมา คือก้าวแรกของการพัฒนาที่ยั่งยืน

เว็บไซต์ขององค์กรคุณได้คะแนนเท่าไหร่? ถ้าอยากรู้แต่ไม่รู้จะเริ่มยังไง — ให้ทีมเราช่วยวิเคราะห์ได้

บทความที่เกี่ยวข้อง

ทำไม Web Performance ถึงเป็นเรื่องสำคัญอันดับ 1 ของ User Experience — และธุรกิจไทยกำลังสูญเสียลูกค้าจากเรื่องนี้โดยไม่รู้ตัว

เว็บไซต์ที่โหลดช้าเพียง 1 วินาที ทำให้ conversion ลดลง 20% และ 53% ของผู้ใช้มือถือจะออกจากเว็บทันทีถ้าโหลดเกิน 3 วินาที — บทความนี้รวบรวมข้อมูลจาก Google, Amazon, Deloitte พร้อมเรื่องจริงจากเว็บไซต์ที่เราดูแล

จาก Lighthouse 60 ถึง 86 ใน 1 ชั่วโมง — เมื่อแก้ถูกจุด ผลลัพธ์มาทันที

หลังวิเคราะห์ root cause จากบทความก่อน เราแก้ไข 4 ปัญหาหลักและ deploy ใน commit เดียว — Lighthouse Score พุ่งจาก 60 เป็น 86, redirect chain หายไป, TBT ลดจาก 570ms เหลือ 90ms พร้อมตั้ง performance guard ใน pipeline ป้องกัน regression

เมื่อ Data Scientist ของเราตั้งสมมติฐานว่า "ฟอนต์มีหัว vs ไม่มีหัว" เปลี่ยนพฤติกรรมคนอ่าน — แล้วเราก็ลองพิสูจน์จริง

แม้แต่เว็บไซต์บริษัทธรรมดา ๆ เราก็ไม่ปล่อยผ่าน — ทีม Data Scientist ของ Enersys ตั้งสมมติฐานเรื่องฟอนต์ แล้วออกแบบ A/B test วัดพฤติกรรมจริงของผู้ใช้จริง ทั้งหมดนี้เกิดขึ้นบนเว็บไซต์ที่คุณกำลังอ่านอยู่ตอนนี้

"Empowering Innovation,
Transforming Futures."

ติดต่อเราเพื่อทำให้โปรเจกต์ของคุณเป็นจริง