Định dạng lưu trữ Web nhị phân có thể lập trình (PWB) là một định dạng tệp được sử dụng để đóng gói, nén và phân phối hiệu quả mã và tài nguyên ứng dụng dựa trên web. Nó được phát triển để giải quyết sự phức tạp và kích thước ngày càng tăng của các ứng dụng web hiện đại sử dụng nhiều tệp JavaScript, CSS, HTML, hình ảnh và các tệp tài sản khác. Định dạng PWB cho phép các tệp này được đóng gói thành một kho lưu trữ nhị phân duy nhất, giảm yêu cầu lưu trữ và cho phép truyền nhanh hơn qua mạng.
Về cơ bản, một kho lưu trữ PWB bao gồm một tiêu đề tệp theo sau là một loạt các mục tệp. Mỗi mục tệp chứa siêu dữ liệu về một tệp riêng lẻ được lưu trữ trong kho lưu trữ, chẳng hạn như tên, kích thước đã nén và chưa nén và tổng kiểm tra CRC32 để xác minh tính toàn vẹn c ủa dữ liệu. Dữ liệu tệp thực tế được lưu trữ sau siêu dữ liệu và được nén bằng thuật toán Deflate, là sự kết hợp của mã hóa LZ77 và Huffman.
Tiêu đề PWB bắt đầu bằng một số ma thuật 4 byte (0x50574221) để xác định tệp là kho lưu trữ PWB. Theo sau số ma thuật là số phiên bản 2 byte biểu thị phiên bản định dạng PWB. Phiên bản hiện tại là 1.0. Sau phiên bản, có 4 byte được dành riêng để sử dụng trong tương lai, theo sau là một số nguyên 8 byte biểu thị tổng số mục tệp trong kho lưu trữ.
Mỗi mục tệp trong kho lưu trữ PWB bắt đầu bằng một số nguyên 4 byte chỉ định độ dài của siêu dữ liệu của tệp. Siêu dữ liệu được lưu trữ dưới dạng đối tượng JSON và bao gồm các thuộc tính như tên tệp, loại MIME, dấu thời gian và liệu tệp có được nén hay không. Theo sau độ dài siêu dữ liệu là chuỗi siêu dữ liệu được mã hóa JSON thực tế.
Sau siêu dữ liệu, dữ liệu tệp đã nén được lưu trữ. Dữ liệu được tiền tố bằng một số nguyên 8 byte biểu thị kích thước đã nén của dữ liệu, theo sau là một số nguyên 8 byte khác cho kích thước chưa nén. Sau đó, dữ liệu được mã hóa bằng thuật toán nén Deflate, có thể giảm đáng kể kích thước của các tài sản dựa trên văn bản như tệp JavaScript, CSS và HTML.
Một trong những lợi thế chính của định dạng PWB là khả năng lưu trữ và nén hiệu quả các tài sản ứng dụng web. Bằng cách sử dụng nén Deflate, các kho lưu trữ PWB có thể đạt được tỷ lệ nén cao cho các tệp dựa trên văn bản, chiếm phần lớn tài sản ứng dụng web. Điều này làm giảm yêu cầu lưu trữ và tăng tốc độ truyền tệp, vì ít dữ liệu hơn cần được truyền qua mạng.
Một lợi ích khác của PWB là hỗ trợ truy cập ngẫu nhiên vào các tệp riêng lẻ trong kho lưu trữ. Vì siêu dữ liệu của mỗi tệp bao gồm độ lệch và kích thước của nó trong kho lưu trữ, nên các tệp có thể được định vị và trích xuất nhanh chóng mà không cần phải giải nén toàn bộ kho lưu trữ. Điều này đặc biệt hữu ích đối với các ứng dụng web lớn có nhiều tài sản, vì nó cho phép tải hiệu quả các tài nguyên cụ thể theo yêu cầu.
Để tạo kho lưu trữ PWB, các nhà phát triển có thể sử dụng các công cụ như PWB Packager, có sẵn dưới dạng tiện ích dòng lệnh và dưới dạng thư viện để sử dụng theo chương trình. PWB Packager lấy một thư mục các tệp ứng dụng web làm đầu vào và tạo một kho lưu trữ PWB chứa tất cả các tệp và siêu dữ liệu của chúng. Các nhà phát triển cũng có thể chỉ định các tùy chọn cấu hình, chẳng hạn như loại trừ các tệp hoặc thư mục nhất định, đặt các loại MIME tùy chỉnh và điều chỉnh mức độ nén.
Khi một ứng dụng web được đóng gói dưới dạng kho lưu trữ PWB được triển khai, máy chủ lưu trữ ứng dụng có thể sử dụng PWB Converter để trích xuất và phục vụ các tệp riêng lẻ khi cần. PWB Converter là một công cụ phía máy chủ trích xuất hiệu quả các tệp từ kho lưu trữ PWB và lưu chúng vào bộ nhớ hoặc trên đĩa cho các yêu cầu tiếp theo. Điều này cho phép máy chủ phản hồi nhanh chóng các yêu cầu của khách hàng đối với các tài nguyên ứng dụng cụ thể mà không cần phải trích xuất toàn bộ kho lưu trữ mỗi lần.
Định dạng PWB cũng hỗ trợ các kho lưu trữ có chữ ký số để đảm bảo tính toàn vẹn và tính xác thực của chúng. Các nhà phát triển có thể bao gồm chữ ký số trong tiêu đề PWB, có thể được máy chủ hoặc máy khách xác minh để xác nhận rằng kho lưu trữ chưa bị giả mạo và có nguồn gốc từ nguồn đáng tin cậy. Điều này giúp ngăn chặn việc sửa đổi trái phép mã và tài nguyên ứng dụng web, tăng cường bảo mật.
Tóm lại, định dạng lưu trữ PWB là một công cụ mạnh mẽ để đóng gói, nén và phân phối hiệu quả các tài sản ứng dụng web. Bằng cách kết hợp nhiều tệp thành một kho lưu trữ duy nhất với siêu dữ liệu và nén, PWB giảm yêu cầu lưu trữ, tăng tốc độ truyền tệp và cho phép truy cập ngẫu nhiên vào các tài nguyên riêng lẻ. Khi các ứng dụng web tiếp tục phát triển về kích thước và độ phức tạp, định dạng PWB giúp các nhà phát triển tối ưu hóa ứng dụng của họ để tải nhanh hơn và cải thiện hiệu suất.
Nén tệp giảm độ dư thừa để cùng một lượng thông tin sử dụng ít bit hơn. Giới hạn trên được quyết định bởi lý thuyết thông tin: với nén không mất dữ liệu, giới hạn là entropy của nguồn (xem định lý mã nguồn của Shannon source coding theorem và bài báo gốc năm 1948 “A Mathematical Theory of Communication”). Với nén mất dữ liệu, sự đánh đổi giữa bitrate và chất lượng được mô tả bởi lý thuyết rate–distortion.
Hầu hết bộ nén có hai giai đoạn. Đầu tiên một mô hình dự đoán hoặc lộ ra cấu trúc trong dữ liệu. Sau đó một bộ mã biến các dự đoán đó thành mẫu bit gần tối ưu. Gia đình kinh điển là Lempel–Ziv LZ77 (1977) và LZ78 (1978) phát hiện chuỗi lặp rồi phát các tham chiếu thay vì byte thô. Ở phía mã hóa mã Huffman (bài gốc 1952) gán mã ngắn hơn cho ký hiệu có xác suất cao. Mã hóa số học và range coding tiến gần hơn nữa tới giới hạn entropy, trong khi Asymmetric Numeral Systems (ANS) hiện đại đạt được tỷ lệ tương tự với các bảng tra cứu nhanh.
DEFLATE (dùng bởi gzip, zlib, ZIP) kết hợp LZ77 và Huffman. Đặc tả đều mở: DEFLATE RFC 1951, lớp bọc zlib RFC 1950và định dạng gzip RFC 1952. Gzip được thiết kế cho streaming và không cung cấp truy cập ngẫu nhiên. PNG chuẩn hóa DEFLATE là phương pháp duy nhất (cửa sổ tối đa 32 KiB) theo đặc tả “Compression method 0…” và W3C/ISO PNG 2nd Edition.
Zstandard (zstd): bộ nén đa dụng mới cung cấp tỷ lệ cao và giải nén cực nhanh. Định dạng có trong RFC 8878 (cùng bản HTML) và đặc tả tham chiếu trên GitHub. Như gzip, frame cơ bản không nhắm tới truy cập ngẫu nhiên. Siêu năng lực của zstd là từ điển: mẫu nhỏ từ tập dữ liệu giúp hàng loạt tệp nhỏ/giống nhau nén tốt hơn (xem tài liệu python-zstandard và ví dụ của Nigel Tao). Triển khai hỗ trợ cả từ điển “unstructured” lẫn “structured” (thảo luận).
Brotli: tối ưu cho nội dung web (font WOFF2, HTTP). Kết hợp từ điển tĩnh và lõi LZ+entropy giống DEFLATE. Đặc tả là RFC 7932, mô tả cửa sổ 2WBITS−16 với WBITS [10, 24] (1 KiB−16 B tới 16 MiB−16 B) và rằng nó không cung cấp truy cập ngẫu nhiên. Brotli thường vượt gzip trên văn bản web và giải nén nhanh.
Vỏ chứa ZIP: ZIP là kho tệp có thể lưu nhiều phương pháp nén (deflate, store, zstd...). Chuẩn thực tế là APPNOTE của PKWARE (xem cổng APPNOTE, bản lưu trữvà tóm tắt của LC ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 ưu tiên tốc độ tuyệt đối với tỷ lệ vừa phải. Xem trang dự án và định dạng frame. Lý tưởng cho cache trong RAM, telemetri hoặc đường nóng cần giải nén gần tốc độ bộ nhớ.
XZ / LZMA hướng đến mật độ cao (tỷ lệ tốt) với thời gian nén chậm hơn. XZ là vỏ chứa; công việc chính do LZMA/LZMA2 (mô hình LZ77 + range coding) đảm nhiệm. Xem định dạng .xz, đặc tả LZMA (Pavlov)và ghi chú kernel Linux về XZ Embedded. XZ thường nén tốt hơn gzip và cạnh tranh với codec hiện đại, nhưng mã hóa lâu hơn.
bzip2 dùng Biến đổi Burrows–Wheeler (BWT), move-to-front, RLE và Huffman. Thường nhỏ hơn gzip nhưng chậm hơn; xem hướng dẫn chính thức và trang man (Linux).
Kích thước “cửa sổ” rất quan trọng. Tham chiếu DEFLATE chỉ nhìn lại 32 KiB (RFC 1951) và giới hạn 32 KiB của PNG được nêu ở đây. Brotli hỗ trợ cửa sổ từ ~1 KiB đến 16 MiB (RFC 7932). Zstd điều chỉnh cửa sổ và độ sâu tìm kiếm theo level (RFC 8878). Dòng cơ sở của gzip/zstd/brotli hướng tới giải nén tuần tự; bản thân định dạng không hứa truy cập ngẫu nhiên, nhưng các vỏ chứa (tar có chỉ mục, framing theo khối, chỉ mục chuyên biệt) có thể bổ sung.
Các định dạng trên là lossless: bạn khôi phục đúng byte ban đầu. Codec media thường lossy: loại bỏ chi tiết khó nhận biết để giảm bitrate. Với ảnh, JPEG cổ điển (DCT, lượng tử hóa, mã entropy) được chuẩn hóa trong ITU-T T.81 / ISO/IEC 10918-1. Với âm thanh, MP3 (MPEG-1 Layer III) và AAC (MPEG-2/4) dùng mô hình cảm nhận và biến đổi MDCT (xem ISO/IEC 11172-3, ISO/IEC 13818-7và tổng quan MDCT tại đây). Lossy và lossless có thể cùng tồn tại (ví dụ PNG cho UI, codec web cho ảnh/video/audio).
Lý thuyết Shannon 1948 · Rate–distortion · Mã hóa Huffman 1952 · Mã số học · Range coding · ANS. Định dạng DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · định dạng XZ. Chuỗi BWT Burrows–Wheeler (1994) · hướng dẫn bzip2. Media JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Tóm lại: hãy chọn bộ nén phù hợp dữ liệu và ràng buộc của bạn, đo trên dữ liệu thực và đừng quên lợi ích từ từ điển cùng cách đóng gói thông minh. Khi ghép đúng, bạn sẽ có tệp nhỏ hơn, truyền nhanh hơn và ứng dụng phản hồi hơn mà không hy sinh độ chính xác hay tính di động.
Nén file là quá trình giảm kích thước của một file hoặc các file, thường để tiết kiệm không gian lưu trữ hoặc tăng tốc độ truyền trên mạng.
Nén file hoạt động bằng cách xác định và loại bỏ sự trùng lặp trong dữ liệu. Nó sử dụng thuật toán để mã hóa dữ liệu gốc trong một không gian nhỏ hơn.
Hai loại chính của nén file là nén lossless và lossy. Nén lossless cho phép phục hồi hoàn toàn file gốc, trong khi nén lossy cho phép giảm kích thước đáng kể hơn nhưng có thể mất một phần chất lượng dữ liệu.
Một ví dụ phổ biến về công cụ nén file là WinZip, hỗ trợ nhiều định dạng nén bao gồm ZIP và RAR.
Với nén lossless, chất lượng không thay đổi. Tuy nhiên, với nén lossy, có thể có sự giảm chất lượng rõ rệt do nó loại bỏ dữ liệu ít quan trọng để giảm kích thước file đáng kể hơn.
Có, nén file an toàn về mặt tính toàn vẹn của dữ liệu, đặc biệt với nén lossless. Tuy nhiên, giống như bất kỳ file nào, file nén có thể bị mục tiêu bởi malware hoặc virus, vì vậy luôn quan trọng khi có phần mềm bảo mật uy tín.
Hầu như tất cả các loại file đều có thể được nén, bao gồm file văn bản, hình ảnh, audio, video và file phần mềm. Tuy nhiên, mức độ nén có thể thực hiện đáng kể có thể thay đổi giữa các loại file khác nhau.
ZIP file là một loại định dạng file sử dụng nén lossless để giảm kích thước của một hoặc nhiều file. Nhiều file trong một ZIP file effectively được gói lại thành một file duy nhất, điều này cũng giúp việc chia sẻ dễ dàng hơn.
Về mặt kỹ thuật, có, mặc dù việc giảm kích thước thêm có thể tối thiểu hoặc thậm chí phản tác dụng. Nén một file đã được nén đôi khi có thể tăng kích thước do metadata được thêm vào bởi thuật toán nén.
Để giải nén một file, bạn thường cần một công cụ giải nén hoặc giải nén, như WinZip hoặc 7-Zip. Những công cụ này có thể trích xuất các file gốc từ định dạng nén.