WOFF2

Web Open Font Format 2.0 — tiêu chuẩn vàng cho web fonts, với nén Brotli mang lại kích thước tệp nhỏ nhất.

.woff2 Web Open Font Format 2.0
LoạiBinary nén
NénBrotli
Kích thước tệpNhỏ nhất (~30% nhỏ hơn WOFF)
Hỗ trợ97%+ trình duyệt
Phù hợp nhất choDự án web hiện đại (khuyến nghị)
BobcornLuôn được bao gồm

WOFF2 Là Gì?

WOFF2 được phát triển bởi Google và trở thành W3C Recommendation vào tháng 3 năm 2018. Nó xây dựng dựa trên khái niệm WOFF gốc nhưng thay thế nén zlib bằng Brotli — một thuật toán nén cũng được Google phát triển — đạt tỷ lệ nén tốt hơn đáng kể.

Nhưng WOFF2 không chỉ là "WOFF với nén tốt hơn". Nó giới thiệu một biến đổi tiền xử lý tái cấu trúc dữ liệu font trước khi nén, làm cho nó có thể nén được nhiều hơn đáng kể. Đối với TrueType outlines, điều này có nghĩa là áp dụng predictive coding cho tọa độ glyph — mã hóa mỗi điểm như một delta từ giá trị dự đoán thay vì tọa độ tuyệt đối. Kết quả là một luồng byte dư thừa nhiều hơn mà Brotli có thể nén mạnh.

Cách tiếp cận hai bước này — tiền xử lý đặc thù theo lĩnh vực theo sau bởi nén mục đích chung — là lý do tại sao WOFF2 luôn tạo ra các tệp font nhỏ nhất trong mọi định dạng.

Cách Hoạt Động

WOFF2 áp dụng pipeline nén hai pha cho dữ liệu font nguồn:

  • Pha 1: Biến đổi tiền xử lý — các biến đổi đặc thù cho font tái cấu trúc dữ liệu để tối đa hóa khả năng nén. Đối với TrueType glyph outlines, sử dụng predictive coding của tọa độ — mỗi điểm được mã hóa là hiệu số từ vị trí dự đoán, tạo ra các số nhỏ hơn nhiều. Các biến đổi tương tự được áp dụng cho các bảng font khác.
  • Pha 2: Nén Brotli — dữ liệu đã tiền xử lý sau đó được nén bằng Brotli, kết hợp nén cửa sổ trượt LZ77 với mã hóa Huffman và từ điển tĩnh tích hợp. Brotli đạt nén tốt hơn zlib 20-30% trên dữ liệu font điển hình.

Ở phía trình duyệt, quá trình đảo ngược: giải nén Brotli theo sau bởi các biến đổi nghịch để tái tạo các bảng font gốc. Mặc dù có bước thêm, giải nén WOFF2 thực sự nhanh hơn WOFF1 — Brotli được thiết kế để giải mã nhanh, và tệp nhỏ hơn truyền nhanh hơn qua mạng.

Font stack điển hình với WOFF2
@font-face {
  font-family: 'MyIcons';
  src: url('icons.woff2') format('woff2');
  font-display: swap;
}

.icon { font-family: 'MyIcons'; }
.icon-home::before { content: '\E001'; }

Lưu ý chúng ta chỉ liệt kê một src — chỉ WOFF2. Với mức phủ trình duyệt 97%+, nhiều dự án hiện đại không còn cần định dạng fallback. Chỉ thị font-display: swap yêu cầu trình duyệt hiển thị văn bản ngay lập tức bằng font dự phòng trong khi icon font đang tải, ngăn chặn văn bản vô hình.

Ưu và Nhược điểm

    Ưu điểm
  • Tỷ lệ nén tốt nhất trong tất cả định dạng font
  • Giải nén nhanh nhất (Brotli được tối ưu cho tốc độ giải mã)
  • W3C Recommendation (tiêu chuẩn web chính thức từ 2018)
  • Được hỗ trợ bởi 97%+ trình duyệt toàn cầu
  • Tiêu chuẩn ngành được thiết lập cho web fonts
    Nhược điểm
  • Không được hỗ trợ trong bất kỳ phiên bản Internet Explorer nào
  • Yêu cầu công cụ chuyển đổi (không thể chỉnh sửa tay như SVG Font)
  • Không phù hợp để cài đặt font ở cấp OS (dùng TTF cho mục đó)

Hỗ Trợ Trình Duyệt

WOFF2 được hỗ trợ rộng rãi trên tất cả các trình duyệt hiện đại. Khoảng cách đáng kể duy nhất là Internet Explorer, đã được Microsoft chính thức ngừng vào tháng 6 năm 2022.

Trình duyệtPhiên bản tối thiểu
Chrome36+
Firefox39+
Safari12+
Edge14+
Opera23+
Internet ExplorerKhông hỗ trợ

Mức phủ toàn cầu kết hợp ở khoảng 97%. ~3% còn lại hầu hết bao gồm các cài đặt IE cũ và các trình duyệt di động rất cũ.

Mẹo
Từ năm 2024 trở đi, chỉ WOFF2 là đủ cho đại đa số các dự án web. Chỉ thêm WOFF làm fallback nếu analytics của bạn cho thấy traffic IE 11 đáng kể.

So Sánh Kích Thước Tệp

Để minh họa lợi thế nén của WOFF2, đây là kích thước tệp điển hình cho icon font chứa 200 glyphs:

Định dạngKích thước điển hìnhGiảm so với TTF
.ttf~80 KBCơ sở
.woff~48 KBNhỏ hơn ~40%
.woff2~34 KBNhỏ hơn ~58%

Tiết kiệm tích lũy với các bộ biểu tượng lớn hơn. Font 500 glyph có thể là 200 KB dạng TTF, 120 KB dạng WOFF và chỉ 82 KB dạng WOFF2. Qua hàng nghìn lần tải trang, những kilobyte này chuyển trực tiếp thành thời gian hiển thị nhanh hơn và chi phí băng thông thấp hơn.

Khi Nào Sử Dụng WOFF2

Luôn luôn. WOFF2 nên là định dạng mặc định cho bất kỳ triển khai icon font dựa trên web nào. Nó mang lại các tệp nhỏ nhất, giải nén nhanh nhất và hỗ trợ trình duyệt gần như toàn cầu.

Tình huống duy nhất bạn sẽ không sử dụng WOFF2 là nếu bạn đang nhắm mục tiêu Internet Explorer — trong trường hợp đó, ghép nó với WOFF làm fallback:

@font-face {
  font-family: 'MyIcons';
  src: url('icons.woff2') format('woff2'),
       url('icons.woff') format('woff');
  font-display: swap;
}

Trình duyệt hiện đại sẽ lấy tệp WOFF2; IE 11 sẽ chuyển sang WOFF. Mọi người đều nhận được font, mọi người đều nhận được nén.

Trong Bobcorn
WOFF2 luôn được bao gồm trong xuất của Bobcorn — nó không phải tùy chọn vì đây là định dạng web thiết yếu. Bobcorn sử dụng thư viện ttf2woff2 với nén Brotli để có kết quả tối ưu. Bạn sẽ tìm thấy tệp .woff2 được tạo cùng với CSS và các trang demo trong mỗi lần xuất.
Mẹo hiệu suất
Để có hiệu suất tải tốt nhất, hãy sử dụng font-display: swap trong khai báo @font-face của bạn. Điều này cho phép trình duyệt hiển thị văn bản ngay lập tức bằng font dự phòng trong khi icon font đang tải, ngăn chặn "flash of invisible text" (FOIT) có thể làm cho các trang cảm thấy không phản hồi.