ฟอนต์ที่โหลดช้าทำให้ผู้ใช้เห็นข้อความกระพริบ (FOUT) หรือเห็นหน้าจอว่าง (FOIT) ทั้งสองทำลาย user experience Font loading strategy ที่ดีช่วยให้ text เห็นเร็ว ไม่กระโดด และ PageSpeed ไม่ตก

ปัญหาที่เกิดจากฟอนต์โหลดช้า

ปัญหาอาการผลกระทบ
FOIT (Flash of Invisible Text)ข้อความหายไปจนกว่าฟอนต์จะโหลดเสร็จผู้ใช้เห็นหน้าว่าง 1-3 วินาที
FOUT (Flash of Unstyled Text)เห็น system font ก่อน แล้วเปลี่ยนเป็น web fontLayout shift (CLS สูง)
Render BlockingBrowser รอโหลดฟอนต์ก่อน renderLCP ช้า PageSpeed ตก

font-display Property

font-display เป็น CSS property ที่ควบคุมพฤติกรรมเมื่อ web font ยังโหลดไม่เสร็จ ช่วยแก้ปัญหา FOIT/FOUT ได้โดยตรง

ค่าพฤติกรรมเหมาะกับ
swapแสดง fallback ทันที เปลี่ยนเมื่อ font โหลดเสร็จBody text ทั่วไป (แนะนำ)
optionalใช้ font ถ้าโหลดเสร็จเร็ว ไม่งั้นใช้ fallback ตลอดPerformance-first, ยอมไม่ได้ custom font
fallbackรอ 100ms ถ้าไม่เสร็จใช้ fallback เปลี่ยนเมื่อเสร็จBalance ระหว่าง speed + brand font
blockซ่อน text 3 วินาที รอ fontไม่แนะนำ ทำให้ FOIT
autoให้ browser ตัดสินใจ (มักเป็น block)ไม่แนะนำ

เทคนิค Font Loading ที่เห็นผล

1. Preload Critical Fonts

ใช้ <link rel="preload"> สำหรับ font ที่ใช้ above-the-fold บอก browser ให้เริ่มโหลดเร็วขึ้น ไม่ต้องรอ CSS parse

2. ใช้ WOFF2 Format

WOFF2 มี compression ดีกว่า WOFF 30% และ browser support 97%+ ไม่มีเหตุผลที่จะใช้ format อื่นเป็น primary อีกต่อไป

3. Font Subsetting

ตัดอักขระที่ไม่ใช้ออก เช่น ถ้าเว็บภาษาไทย+อังกฤษ ตัด Chinese, Japanese, Korean characters ออก ลดขนาดไฟล์ได้ 50-80%

4. Self-hosting vs Google Fonts

วิธีข้อดีข้อเสีย
Self-hostควบคุม cache, ไม่มี DNS lookup เพิ่ม, GDPR compliantต้อง optimize เอง
Google Fontsง่าย, CDN เร็ว, auto subsetDNS lookup เพิ่ม, ปัญหา privacy (GDPR)

สำหรับ performance สูงสุด แนะนำ self-host + WOFF2 + preload ส่วน Google Fonts เหมาะกับโปรเจกต์ที่ต้องการความง่าย

5. System Font Stack Fallback

ตั้ง fallback font ที่ metrics ใกล้เคียง web font เพื่อลด layout shift เมื่อ font เปลี่ยน ใช้ CSS size-adjust, ascent-override, descent-override ปรับ metrics ให้ตรง

คำถามที่พบบ่อย

font-display: swap คืออะไร

เป็น CSS property ที่บอก browser ให้แสดง fallback font ทันที ไม่ต้องรอ web font โหลดเสร็จ เมื่อ web font พร้อมจึงค่อยสลับ ผลคือผู้ใช้เห็น text เร็วขึ้นแทนที่จะเห็นหน้าว่าง

ควร self-host font หรือใช้ Google Fonts

ถ้าเน้น performance + privacy ควร self-host ลด DNS lookup 1 round-trip ควบคุม caching ได้เอง และไม่ส่งข้อมูลผู้ใช้ไป Google (GDPR compliant) แต่ถ้าต้องการความง่าย Google Fonts ก็ทำงานได้ดี

FOIT กับ FOUT ต่างกันอย่างไร

FOIT (Flash of Invisible Text) คือข้อความหายไปจนกว่า font จะโหลดเสร็จ ผู้ใช้เห็นหน้าว่าง FOUT (Flash of Unstyled Text) คือเห็น fallback font ก่อนแล้วเปลี่ยน FOUT ดีกว่าเพราะผู้ใช้อ่านได้ทันที

ทำให้ฟอนต์โหลดเร็วขึ้น

Font loading ส่งผลต่อทั้ง UX และ Core Web Vitals ถ้าต้องการทีมที่ช่วย optimize เว็บ ให้โหลดเร็วและ PageSpeed สูง — คุยกับเรา

บทความแนะนำ