ป้องกันการเปลี่ยนเลย์เอาต์และการกะพริบของข้อความที่มองไม่เห็น (FOIT) โดยการโหลดแบบอักษรเสริมไว้ล่วงหน้า

ตั้งแต่ Chrome เวอร์ชัน 83 เป็นต้นไป คุณจะใช้ link rel="preload" และ font-display: optional ร่วมกันเพื่อขจัดปัญหาความกระตุกของเลย์เอาต์ได้

Chrome 83 เพิ่มประสิทธิภาพรอบการแสดงผลเพื่อขจัดการเปลี่ยนเลย์เอาต์เมื่อโหลดแบบออนดีมานด์แบบไม่บังคับล่วงหน้า การรวม <link rel="preload"> เข้ากับ font-display: optional เป็นวิธีที่มีประสิทธิภาพมากที่สุดในการรับประกันว่าเลย์เอาต์จะไม่กระตุกเมื่อแสดงผลแบบอักษรที่กำหนดเอง

ความเข้ากันได้กับเบราว์เซอร์

ดูข้อมูลการรองรับข้ามเบราว์เซอร์ล่าสุดจาก MDN ได้ที่

การแสดงผลแบบอักษร

การเปลี่ยนเลย์เอาต์หรือการจัดเรียงใหม่จะเกิดขึ้นเมื่อทรัพยากรในหน้าเว็บมีการเปลี่ยนแปลงแบบไดนามิก ซึ่งส่งผลให้เนื้อหา "เปลี่ยน" การดึงข้อมูลและการแสดงผลแบบอักษรเว็บอาจทําให้เลย์เอาต์เปลี่ยนรูปแบบได้โดยตรงใน 2 วิธีดังนี้

  • ระบบจะเปลี่ยนแบบอักษรสำรองด้วยแบบอักษรใหม่ ("ข้อความที่ไม่มีการจัดรูปแบบปรากฏขึ้นชั่วครู่")
  • ข้อความ "มองไม่เห็น" จะแสดงจนกว่าหน้าเว็บจะแสดงผลแบบอักษรใหม่ ("ข้อความมองไม่เห็นกะพริบ")

พร็อพเพอร์ตี้ font-display ของ CSS มีวิธีแก้ไขลักษณะการแสดงผลแบบต่างๆ ของแบบอักษรที่กำหนดเองผ่านค่าที่รองรับ (auto, block, swap, fallback และ optional) การเลือกค่าที่จะใช้ขึ้นอยู่กับลักษณะการทำงานที่ต้องการสำหรับแบบอักษรที่โหลดแบบไม่พร้อมกัน อย่างไรก็ตาม ค่าที่รองรับทั้งหมดเหล่านี้สามารถทริกเกอร์การจัดเรียงใหม่ได้โดยใช้วิธีใดวิธีหนึ่งจาก 2 วิธีข้างต้น

แบบอักษรที่ไม่บังคับ

พร็อพเพอร์ตี้ font-display ใช้ไทม์ไลน์ 3 ช่วงเพื่อจัดการแบบอักษรที่ต้องดาวน์โหลดก่อนจึงจะแสดงผลได้ ดังนี้

  • บล็อก: แสดงผลข้อความที่ "มองไม่เห็น" แต่เปลี่ยนไปใช้แบบอักษรเว็บทันทีที่โหลดเสร็จ
  • สลับ: แสดงผลข้อความโดยใช้แบบอักษรของระบบสำรอง แต่เปลี่ยนไปใช้แบบอักษรเว็บทันทีที่โหลดเสร็จ
  • ไม่ผ่าน: แสดงผลข้อความโดยใช้แบบอักษรของระบบสำรอง

ก่อนหน้านี้แบบอักษรที่กําหนดด้วย font-display: optional จะมีระยะเวลาการบล็อก 100 มิลลิวินาทีและไม่มีระยะเวลาการแลกเปลี่ยน ซึ่งหมายความว่าข้อความ "มองไม่เห็น" จะแสดงขึ้นสั้นๆ ก่อนเปลี่ยนไปใช้แบบอักษรสำรอง หากไม่ได้ดาวน์โหลดแบบอักษรภายใน 100 มิลลิวินาที ระบบจะใช้แบบอักษรสำรองและจะไม่สลับ

แผนภาพที่แสดงลักษณะการทำงานของแบบอักษรที่ไม่บังคับก่อนหน้านี้เมื่อโหลดแบบอักษรไม่สำเร็จ
ลักษณะการทำงานก่อนหน้านี้ของ font-display: optional ใน Chrome เมื่อดาวน์โหลดแบบอักษรหลังจากระยะเวลาการบล็อก 100 มิลลิวินาที

อย่างไรก็ตาม ในกรณีที่ดาวน์โหลดแบบอักษรก่อนที่ระยะเวลาการบล็อก 100 มิลลิวินาทีจะสิ้นสุดลง ระบบจะแสดงผลแบบอักษรที่กำหนดเองและใช้แบบอักษรนั้นในหน้าเว็บ

แผนภาพแสดงลักษณะการทำงานของแบบอักษรที่ไม่บังคับก่อนหน้านี้เมื่อโหลดแบบอักษรได้ทันเวลา
ลักษณะการทำงานก่อนหน้านี้ของ font-display: optional ใน Chrome เมื่อมีการดาวน์โหลดแบบอักษรก่อนระยะเวลาการบล็อก 100 มิลลิวินาที

Chrome จะแสดงผลหน้าเว็บอีกครั้ง2 ครั้งในทั้ง 2 กรณีนี้ ไม่ว่าจะใช้แบบอักษรสำรองหรือไม่ หรือแบบอักษรที่กำหนดเองโหลดเสร็จทันเวลาหรือไม่ก็ตาม ซึ่งทําให้ข้อความที่มองไม่เห็นกะพริบเล็กน้อย และในกรณีที่มีการแสดงผลแบบอักษรใหม่ เลย์เอาต์จะกระตุกขณะย้ายเนื้อหาบางส่วนของหน้า ซึ่งจะเกิดขึ้นแม้ว่าแบบอักษรจะจัดเก็บอยู่ในแคชดิสก์ของเบราว์เซอร์และสามารถโหลดได้ก่อนที่ระยะเวลาการบล็อกจะสิ้นสุดลง

การเพิ่มประสิทธิภาพได้เปิดตัวใน Chrome 83 เพื่อนำรอบการแสดงผลแรกสำหรับแบบอักษรที่ไม่บังคับซึ่งโหลดไว้ล่วงหน้าด้วย <link rel="preload'> ออกทั้งหมด แต่ระบบจะบล็อกการแสดงผลจนกว่าแบบอักษรที่กำหนดเองจะโหลดเสร็จหรือผ่านไประยะเวลาหนึ่ง ปัจจุบันระยะเวลาหมดเวลานี้ตั้งค่าไว้ที่ 100 มิลลิวินาที แต่อาจเปลี่ยนแปลงในอนาคตอันใกล้เพื่อเพิ่มประสิทธิภาพ

แผนภาพที่แสดงลักษณะการทํางานแบบใหม่ของแบบอักษรที่ไม่บังคับซึ่งโหลดไว้ล่วงหน้าเมื่อโหลดแบบอักษรไม่สําเร็จ
ลักษณะการทำงานแบบใหม่ของ font-display: optional ใน Chrome เมื่อโหลดแบบล่วงหน้าและดาวน์โหลดแบบ หลังระยะเวลาการบล็อก 100 มิลลิวินาที (ไม่มีข้อความที่มองไม่เห็นกะพริบ)
แผนภาพที่แสดงลักษณะการทํางานแบบใหม่ของแบบอักษรที่โหลดไว้ล่วงหน้าซึ่งไม่บังคับเมื่อโหลดแบบอักษรได้ทันเวลา
ลักษณะการทำงานแบบใหม่ของ font-display: optional ใน Chrome เมื่อโหลดแบบล่วงหน้าและดาวน์โหลดแบบ ก่อนระยะเวลาการบล็อก 100 มิลลิวินาที (ไม่มีข้อความที่มองไม่เห็นกะพริบ)

การโหลดแบบอักษรที่ไม่บังคับล่วงหน้าใน Chrome จะช่วยป้องกันไม่ให้เลย์เอาต์กระตุกและข้อความที่แสดงโดยไม่มีการจัดรูปแบบกะพริบ ซึ่งสอดคล้องกับลักษณะการทำงานที่จำเป็นตามที่ระบุไว้ในโมดูลแบบอักษร CSS ระดับ 4 ซึ่งแบบอักษรที่ไม่บังคับไม่ควรทำให้มีการปรับเปลี่ยนเลย์เอาต์ใหม่ และ User Agent สามารถเลื่อนการแสดงผลออกไปเป็นระยะเวลาที่เหมาะสมแทน

แม้ว่าจะไม่จำเป็นต้องโหลดแบบอักษรที่ไม่บังคับล่วงหน้า แต่วิธีนี้จะช่วยเพิ่มโอกาสในการโหลดแบบอักษรก่อนรอบการแสดงผลแรกได้อย่างมาก โดยเฉพาะในกรณีที่ยังไม่ได้จัดเก็บแบบอักษรไว้ในแคชของเบราว์เซอร์

บทสรุป

ทีม Chrome อยากทราบประสบการณ์ของคุณในการโหลดแบบอักษรที่ไม่บังคับล่วงหน้าเมื่อใช้การเพิ่มประสิทธิภาพใหม่เหล่านี้ รายงานปัญหาหากพบปัญหาหรือต้องการแนะนำฟีเจอร์