Text Compression
Công nghệ giảm kích thước dữ liệu văn bản. Các thuật toán như gzip, Brotli và deflate được sử dụng phổ biến.
Nén văn bản là công nghệ giảm kích thước dữ liệu bằng cách khai thác sự dư thừa trong dữ liệu văn bản. Trên web, các thuật toán như gzip, Brotli và deflate được sử dụng rộng rãi để nén phản hồi HTTP, cải thiện đáng kể tốc độ tải trang. Tệp văn bản có độ dư thừa cao hơn so với hình ảnh và video, khiến nén đặc biệt hiệu quả.
Nguyên lý cơ bản của nén văn bản là phát hiện các mẫu lặp lại và thay thế chúng bằng mã ngắn hơn. Ví dụ, "AAABBBCCC" có thể được biểu diễn là "3A3B3C" (mã hóa run-length). Các thuật toán nén thực tế phức tạp hơn: thuật toán deflate, kết hợp LZ77 (cửa sổ trượt) và mã hóa Huffman, tạo nền tảng cho gzip. Tệp HTML, CSS và JavaScript chứa nhiều mẫu lặp lại, cho phép giảm kích thước 60-80%. Sách hiệu suất web đề cập đến tác động của nén.
gzip là định dạng nén được áp dụng rộng rãi nhất, được hỗ trợ bởi hầu hết tất cả trình duyệt và máy chủ. Brotli, được Google phát hành năm 2015, đạt tỷ lệ nén tốt hơn 15-25% so với gzip. Ưu điểm của nó đặc biệt rõ rệt cho nén trước nội dung tĩnh. Zstandard (zstd), được Facebook phát triển, cung cấp sự cân bằng tuyệt vời giữa tốc độ nén và tỷ lệ nén.
Nén phía máy chủ được bật bằng gzip on; or brotli on; trong Nginx, và mod_deflate trong Apache. CDN như CloudFront và Cloudflare cung cấp nén tự động, cho phép phân phối nén mà không cần cấu hình máy chủ gốc. Trình duyệt truyền đạt các định dạng được hỗ trợ qua tiêu đề Accept-Encoding , và máy chủ phản hồi bằng tiêu đề Content-Encoding .
Một quan niệm sai lầm phổ biến là tất cả tệp nên được nén. Tệp nhị phân như JPEG, PNG và MP4 đã được nén, nên nén lại chúng cho kết quả giảm kích thước không đáng kể trong khi lãng phí tài nguyên CPU. Nén nên giới hạn ở các tệp dựa trên văn bản như HTML, CSS, JavaScript, JSON, XML và SVG. Tệp rất nhỏ (dưới 1KB) thực tế có thể tăng kích thước sau khi nén do chi phí tiêu đề.
Từ góc độ đếm ký tự, dữ liệu nén ở định dạng nhị phân và khái niệm số ký tự không áp dụng. Số ký tự trước khi nén và số byte sau khi nén là các chỉ số khác nhau. Tuy nhiên, văn bản có nhiều ký tự hơn có xu hướng hưởng lợi nhiều hơn từ nén. Văn bản có từ và cụm từ lặp lại đạt tỷ lệ nén cao hơn, trong khi chuỗi ngẫu nhiên nén kém. Sách thuật toán nén dữ liệu cung cấp tham khảo thêm.