เพิ่มประสิทธิภาพแบบอักษรสำหรับเว็บ

ในโมดูลที่ผ่านมา คุณได้เรียนรู้วิธีเพิ่มประสิทธิภาพ HTML, CSS, JavaScript และทรัพยากรสื่อ ในโมดูลนี้ คุณจะได้เรียนรู้วิธีเพิ่มประสิทธิภาพแบบอักษรบนเว็บ

แบบอักษรบนเว็บอาจส่งผลต่อประสิทธิภาพของหน้าเว็บทั้งในเวลาโหลดและเวลาในการแสดงผล ไฟล์แบบอักษรขนาดใหญ่อาจใช้เวลาในการดาวน์โหลดนานและส่งผลเสียต่อFirst Contentful Paint (FCP) ในขณะที่ค่า font-display ที่ไม่ถูกต้องอาจทำให้เกิด การเปลี่ยนเลย์เอาต์ที่ไม่พึงประสงค์ซึ่งส่งผลต่อการเปลี่ยนเลย์เอาต์สะสม (CLS) ของหน้าเว็บ

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

Discovery

แบบอักษรของเว็บของหน้าเว็บจะกำหนดไว้ในชีตสไตล์โดยใช้@font-face การประกาศ:

@font-face {
  font-family: "Open Sans";
  src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}

ข้อมูลโค้ดข้างต้นกำหนด font-family ชื่อ "Open Sans" และ บอกเบราว์เซอร์ว่าควรมองหาแหล่งข้อมูลแบบอักษรบนเว็บที่เกี่ยวข้องจากที่ใด เบราว์เซอร์จะไม่ดาวน์โหลดแบบอักษรบนเว็บจนกว่าจะพิจารณาได้ว่าเลย์เอาต์ของหน้าปัจจุบันจำเป็นต้องใช้แบบอักษรดังกล่าว เพื่อประหยัดแบนด์วิดท์

h1 {
  font-family: "Open Sans";
}

ในข้อมูลโค้ด CSS ก่อนหน้า เบราว์เซอร์จะดาวน์โหลดไฟล์แบบอักษร "Open Sans" ขณะแยกวิเคราะห์องค์ประกอบ <h1> ใน HTML ของหน้าเว็บ

preload

หากกำหนดประกาศ @font-face ในชีตสไตล์ภายนอก เบราว์เซอร์จะเริ่มดาวน์โหลดได้หลังจากที่ดาวน์โหลดชีตสไตล์แล้วเท่านั้น ซึ่งทำให้แบบอักษรบนเว็บเป็นทรัพยากรที่ค้นพบในภายหลัง แต่ก็มีวิธีช่วยให้เบราว์เซอร์ค้นพบแบบอักษรบนเว็บได้เร็วขึ้น

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

<!-- The `crossorigin` attribute is required for fonts—even
     self-hosted ones, as fonts are considered CORS resources. -->
<link rel="preload" as="font" href="/fonts/OpenSans-Regular-webfont.woff2" crossorigin>

การประกาศ @font-face ในหน้า

คุณทำให้แบบอักษรค้นพบได้เร็วขึ้นในระหว่างการโหลดหน้าเว็บโดยการแทรก CSS ที่บล็อกการแสดงผล รวมถึงประกาศ @font-face ใน <head> ของ HTML โดยใช้องค์ประกอบ <style> ในกรณีนี้ เบราว์เซอร์จะค้นพบ แบบอักษรบนเว็บได้เร็วขึ้นในระหว่างการโหลดหน้าเว็บ เนื่องจากไม่จำเป็นต้องรอให้ดาวน์โหลด ชีตสไตล์ภายนอก

การประกาศ @font-face แบบอินไลน์มีข้อดีมากกว่าการใช้คำแนะนำ preload เนื่องจากเบราว์เซอร์จะดาวน์โหลดเฉพาะแบบอักษรที่จำเป็นต่อการแสดงผลหน้าปัจจุบัน เท่านั้น ซึ่งจะช่วยลดความเสี่ยงในการดาวน์โหลดแบบอักษรที่ไม่ได้ใช้

ดาวน์โหลด

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

โฮสต์แบบอักษรบนเว็บด้วยตนเอง

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

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

<link rel="preconnect" href="https://fonts.googleapis.com">  
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

ข้อมูลโค้ด HTML ก่อนหน้าจะแนะนำให้เบราว์เซอร์สร้างการเชื่อมต่อกับ fonts.googleapis.com และการเชื่อมต่อ CORS กับ fonts.gstatic.com ผู้ให้บริการแบบอักษรบางราย เช่น Google Fonts จะแสดง CSS และทรัพยากรแบบอักษรจากต้นทางที่แตกต่างกัน

คุณไม่จำเป็นต้องเชื่อมต่อกับบุคคลที่สามโดยการโฮสต์แบบ อักษรเว็บด้วยตนเอง ในกรณีส่วนใหญ่ การโฮสต์แบบ Self-Hosting สำหรับแบบอักษรบนเว็บจะเร็วกว่าการดาวน์โหลดจากโดเมนที่ต่างกัน หากวางแผนที่จะโฮสต์แบบอักษรบนเว็บด้วยตนเอง ให้ตรวจสอบว่าเว็บไซต์ใช้เครือข่ายนำส่งข้อมูล (CDN), HTTP/2 หรือ HTTP/3 และตั้งค่าส่วนหัวการแคชที่ถูกต้องสำหรับแบบอักษรบนเว็บที่ต้องการสำหรับเว็บไซต์

ใช้ WOFF2 และ WOFF2 เท่านั้น

WOFF2 รองรับเบราว์เซอร์อย่างกว้างขวางและมีการบีบอัดที่ดีที่สุด ซึ่งดีกว่า WOFF ถึง 30% ไฟล์ที่มีขนาดเล็กลงจะช่วยให้ดาวน์โหลดได้เร็วขึ้น โดยปกติแล้ว รูปแบบ WOFF2 เป็นรูปแบบเดียวที่จำเป็นสำหรับการใช้งานร่วมกันอย่างเต็มรูปแบบในเบราว์เซอร์สมัยใหม่

สร้างชุดย่อยของแบบอักษรเว็บ

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

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

ผู้ให้บริการแบบอักษรบนเว็บบางราย เช่น Google Fonts จะเสนอชุดย่อยโดยอัตโนมัติผ่าน การใช้พารามิเตอร์สตริงการค้นหา ตัวอย่างเช่น URL https://fonts.googleapis.com/css?family=Roboto&subset=latin จะแสดงสไตล์ชีตที่มีแบบอักษร Roboto บนเว็บซึ่งใช้เฉพาะตัวอักษรละติน

หากตัดสินใจที่จะโฮสต์แบบอักษรบนเว็บด้วยตนเอง ขั้นตอนถัดไปคือการสร้างและ โฮสต์ชุดย่อยเหล่านั้นด้วยตนเองโดยใช้เครื่องมือต่างๆ เช่น glyphanger หรือ subfont

อย่างไรก็ตาม หากไม่มีความสามารถในการโฮสต์แบบอักษรของเว็บด้วยตนเอง คุณสามารถ สร้างชุดย่อยของแบบอักษรของเว็บที่ Google Fonts จัดหาให้ได้โดยการระบุtext พารามิเตอร์สตริงการค้นหาเพิ่มเติมที่มีเฉพาะจุดโค้ด Unicode ที่จำเป็นสำหรับ เว็บไซต์ของคุณ เช่น หากคุณมีแบบอักษรเว็บที่ใช้แสดงในเว็บไซต์ซึ่งต้องการอักขระเพียงไม่กี่ตัวสำหรับวลี "ยินดีต้อนรับ" คุณสามารถขอชุดย่อยดังกล่าวผ่าน Google Fonts ได้โดยใช้ URL ต่อไปนี้ https://fonts.googleapis.com/css?family=Monoton&text=Welcome ซึ่งจะช่วยลดปริมาณข้อมูลแบบอักษรบนเว็บที่จำเป็นสำหรับแบบอักษรเดียวในเว็บไซต์ได้อย่างมาก หากการแบ่งชุดย่อยที่มากเช่นนี้มีประโยชน์ในเว็บไซต์

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

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

block

ค่าเริ่มต้นของ font-display คือ block เมื่อใช้ block เบราว์เซอร์ จะบล็อกการแสดงผลข้อความที่ใช้แบบอักษรบนเว็บที่ระบุ เบราว์เซอร์แต่ละโปรแกรม จะทำงานแตกต่างกันเล็กน้อย Chromium และ Firefox จะบล็อกการแสดงผลเป็นเวลาสูงสุด 3 วินาทีก่อนที่จะใช้แบบอักษรสำรอง Safari จะบล็อกอย่างไม่มีกำหนด จนกว่าจะโหลดแบบอักษรเว็บ

swap

swap คือค่า font-display ที่ใช้กันอย่างแพร่หลายมากที่สุด swap does not block rendering, and shows the text immediately in a fallback before swapping in the specified web font. ซึ่งช่วยให้คุณแสดงเนื้อหาได้ทันทีโดยไม่ต้องรอให้ระบบดาวน์โหลดแบบอักษรบนเว็บ

อย่างไรก็ตาม ข้อเสียของ swap คือทำให้เกิดการเปลี่ยนเลย์เอาต์หากฟอนต์สำรองบนเว็บและฟอนต์บนเว็บที่ระบุใน CSS มีความแตกต่างกันอย่างมากในแง่ของความสูงของบรรทัด การเหลื่อมตัวอักษร และเมตริกฟอนต์อื่นๆ ซึ่งอาจส่งผลต่อ CLS ของเว็บไซต์หาก คุณไม่ระมัดระวังในการใช้คำแนะนำ preload เพื่อโหลดทรัพยากรแบบอักษรบนเว็บโดยเร็วที่สุด หรือหากคุณไม่ได้พิจารณาค่า font-display อื่นๆ

fallback

ค่า fallback สำหรับ font-display เป็นค่าที่อยู่ระหว่าง block และ swap ซึ่งต่างจาก swap ตรงที่เบราว์เซอร์จะบล็อกการแสดงผลแบบอักษร แต่จะ สลับข้อความสำรองเป็นระยะเวลาสั้นๆ เท่านั้น แต่block ระยะเวลาการบล็อกจะสั้นมาก

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

optional

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

ด้วยเหตุนี้ การนำทางหน้าเว็บในภายหลังจึงใช้แบบอักษรบนเว็บได้ทันที เนื่องจาก ระบบดาวน์โหลดแบบอักษรไว้แล้ว font-display: optional หลีกเลี่ยงการเปลี่ยนเลย์เอาต์ที่เห็นได้ใน swap แต่ผู้ใช้บางรายจะไม่เห็นแบบอักษรเว็บหากแบบอักษรมาถึงช้าเกินไปในการไปยังหน้าเว็บเริ่มต้น

การสาธิตแบบอักษร

ทดสอบความรู้ของคุณ

เบราว์เซอร์จะดาวน์โหลดทรัพยากรแบบอักษรบนเว็บเมื่อใด (สมมติว่าไม่ได้ ดึงข้อมูลด้วยpreloadคำสั่ง)

เมื่อสร้าง CSSOM ของหน้าเว็บและพิจารณาแล้วว่าต้องใช้ แบบอักษรบนเว็บสําหรับเลย์เอาต์ปัจจุบัน
ทันทีที่ตรวจพบการอ้างอิงถึงในชีตสไตล์

รูปแบบใดเป็นรูปแบบเดียว (และมีประสิทธิภาพมากที่สุด) ที่จำเป็นต่อการแสดงแบบอักษรเว็บในเบราว์เซอร์สมัยใหม่ทั้งหมด

TTF
WOFF2
EOT
WOFF

ถัดไป: JavaScript ที่แยกโค้ด

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