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 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
- 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
- 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ệt | Phiên bản tối thiểu |
|---|---|
| Chrome | 36+ |
| Firefox | 39+ |
| Safari | 12+ |
| Edge | 14+ |
| Opera | 23+ |
| Internet Explorer | Khô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ũ.
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ạng | Kích thước điển hình | Giảm so với TTF |
|---|---|---|
| .ttf | ~80 KB | Cơ sở |
| .woff | ~48 KB | Nhỏ hơn ~40% |
| .woff2 | ~34 KB | Nhỏ 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.
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.
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.